Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “外部”;";(C)默认情况下 问题:_C++_C_Linker_Extern_Linkage - Fatal编程技术网

C++ “外部”;";(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 __

GCC、MSVC、Clang或某些组合是否支持将链接设置为默认为C

背景

我有一个大的混合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++源,例如,对于重载函数。