extern"C"(C链接)默认情况下

Mat*_*ner 2 c c++ linker extern linkage

GCC,MSVC或Clang,或某些组合支持设置链接默认为C?

背景

我有一个大型的混合C/C++项目,虽然使用C链接在C++源代码中导出符号既简单又合乎逻辑,但这些相同的源代码假设项目其余部分的内容都在C++链接下.

当前的情况要求我明确地包装C源代码中定义的C源代码以及C++源代码从C源代码中使用的所有内容extern "C++".

最重要的是,我不能放置extern "C"整个源文件或头文件,因为实际的C++内容会抱怨.(例如来自#include <memory>我定义的或模板.)

Oli*_*rth 7

头文件中的标准模式是:

#ifdef __cplusplus

// C++ stuff

extern "C" {
#endif

// C/C++ stuff

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

我不确定你还有其他选择.必须在任何地方使用C链接声明C/C++内容.特定于C++的东西必须在各处用C++链接声明.