如果我使用带有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 。 而且你正在尝试的只是错误。