如果我使用带有C工具链的extern“C ++”会发生什么?

时间:2013-08-17 12:24:33

标签: c++ c extern

我的问题主要是关于C ++工具链“理解”C和C ++的事实,所以如果我将一些代码用extern "C"提供给c ++工具链,我认为它可以理解如何处理它;但是,如果我将带有extern "C++"的代码提供给C工具链呢?

预期的行为是什么?

4 个答案:

答案 0 :(得分:7)

如果编译器也理解C ++,它可能会接受它。如果它是一个纯粹的C编译器,它将会对象(就像在extern "C"上一样,因为该语法无效C - 这就是为什么它通常用#ifdef __cplusplus或其他一些包含的原因)

答案 1 :(得分:4)

假设不能编译,它是无效的C语法。

在头文件中使C声明在C和C ++编译器中工作的标准方法是依赖于仅在C ++编译器中定义的预处理器符号。像这样:

#ifdef __cplusplus
extern "C" {
#endif

// C declarations here
// ...

#ifdef __cplusplus
}
#endif

每个C ++编译器定义__cplusplus。

答案 2 :(得分:4)

extern "C++"不是有效的C代码,因此符合标准的C编译器必须发出诊断信息。没有要求它不编译代码。在发布诊断之后,编译器可以自由地执行其实现者认为合适的任何内容。

答案 3 :(得分:2)

如果您使用此选项编写了其他编译​​器,则可以执行此操作。

正如@Mats所回答的,我们有另一个实现此目的的程序是#ifdef __cplusplus。 此外,你所尝试的只是错误。