C++ “外部”;";(C)默认情况下 问题:
GCC、MSVC、Clang或某些组合是否支持将链接设置为默认为C 背景C++ “外部”;";(C)默认情况下 问题:,c++,c,linker,extern,linkage,C++,C,Linker,Extern,Linkage,GCC、MSVC、Clang或某些组合是否支持将链接设置为默认为C 背景 我有一个大的混合C/C++项目,虽然在C++源代码中用C链接导出符号是简单而合理的,但同样的源假设项目其余部分是C++链接。 当前的情况需要我明确地包装C++源中使用的C++源代码以及C++源使用的所有代码,如代码>外部“C++”< /代码> .< 为了解决问题,我不能把“代码”外部“C”//CODE放在整个源或头文件上,因为实际C++的东西会抱怨。(例如从#包括或我定义的模板。)头文件中的标准模式是: #ifdef __
我有一个大的混合C/C++项目,虽然在C++源代码中用C链接导出符号是简单而合理的,但同样的源假设项目其余部分是C++链接。
当前的情况需要我明确地包装C++源中使用的C++源代码以及C++源使用的所有代码,如代码>外部“C++”< /代码> .<
为了解决问题,我不能把“代码”外部“C”//CODE放在整个源或头文件上,因为实际C++的东西会抱怨。(例如从
#包括或我定义的模板。)头文件中的标准模式是:
#ifdef __cplusplus
// C++ stuff
extern "C" {
#endif
// C/C++ stuff
#ifdef __cplusplus
}
#endif
我不确定你还有其他选择。C/C++的东西必须到处用C链接声明。C++特定的东西必须用C++链接来声明。默认情况下, “C”链接只对C源有意义,而不是C++源,反之亦然。“C”链接通常意味着名称/符号不会被损坏。“C”链接不够表达,不能用于C++源,例如,对于重载函数。