我的问题主要是关于C ++工具链“理解”C和C ++的事实,所以如果我将一些代码用extern "C"
提供给c ++工具链,我认为它可以理解如何处理它;但是,如果我将带有extern "C++"
的代码提供给C工具链呢?
预期的行为是什么?
答案 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
。
此外,你所尝试的只是错误。