由于我是新手,Stackoverflow不允许我发表评论。
从标题为here的问题中借用标题,已接受的解决方案表明您必须使用#ifdef __cplusplus
和extern "C"
修改C头文件。
我有完全相同的问题,但是我提供了一个C库,其中包含100多个.h
C头文件和.c
C程序文件,现在我必须使用C ++库,因此我的main()
将使用C ++。
那么我现在是否必须将这些修改添加到每个C头文件中,或者还有其他方法吗?我的main()
在.cpp
文件中,该文件将使用此C库中的函数。
编辑 这个问题已经解决。我希望这个问题能够解决或取消。
答案 0 :(得分:3)
您不必修改任何标题。必需使用extern C {}
包装所有C声明。您也可以在cpp
文件中做到这一点:
extern "C" {
#include "some_c_header.h"
}
int main() {
std::cout << "This is C++ code\n";
}
创建一个仅包含具有C链接的C头的头文件可能会有用:
// c_header.hpp
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "c_header_1.h"
#include "c_header_2.h"
#ifdef __cplusplus
}
#endif
// main.cpp
#include "c_header.hpp" // extern "C" {} already handled for you
答案 1 :(得分:1)
只有那些由C ++组件访问的C函数和对象的声明才需要使用C链接声明,并且仅到即可。据推测,您的新C ++库从现有C代码访问的内容很少(如果有的话),因此主要的问题是main()
(直接)访问的内容。必须使用C链接(向main
声明那些函数)。如果事实证明这是一件很重要的事情,那么您可以考虑进行重构以使其更少。
此外,不,您不需要修改现有的头文件。引用您的C库并因此包含其某些标头的C ++文件可以将相关的#include
语句包装在extern "C"
块中,以解决此问题。