如果我使用带有C工具链的extern“C ++”会发生什么?
我的问题主要是关于C ++工具链“理解”C和C ++的事实,所以如果我将一些带有extern "C"
代码提供给c ++工具链,我认为它可以理解如何处理它; 但是,如果我将带有extern "C++"
代码提供给C工具链呢?
预期的行为是什么?
如果编译器也理解C ++,它可能会接受它。 如果它是一个纯C编译器,它将对象(就像它在extern "C"
一样,因为该语法无效C – 这就是为什么它通常用#ifdef __cplusplus
或其他一些包含)
它应该不编译,它是无效的C语法。
在头文件中使C声明在C和C ++编译器中工作的标准方法是依赖于仅在C ++编译器中定义的预处理器符号。 像这样:
#ifdef __cplusplus extern "C" { #endif // C declarations here // ... #ifdef __cplusplus } #endif
每个C ++编译器都定义了__cplusplus。
extern "C++"
不是有效的C代码,因此符合标准的C编译器必须发出诊断信息。 没有要求它不编译代码。 在发布诊断之后,编译器可以自由地执行其实现者认为合适的任何内容。
如果您使用此选项编写了其他编译器,则可以执行此操作。
正如@Mats所回答的,我们有另一个实现此目的的程序是#ifdef __cplusplus
。 而且你正在尝试的只是错误。