我刚刚得到了一些使用extern“C”的C代码来声明这样的外部函数:
extern "C" void func();
这是有效的C吗?我在这一行收到错误,但我不确定是不是因为这个或其他原因。
答案 0 :(得分:30)
不,它无效C.它只应在C ++代码中用于引用C代码中定义的函数。 extern "C"
应该包含在ifdef __cplusplus
/ #endif
块中:
// For one function
#ifdef __cplusplus
extern "C"
#endif
void func();
// For more than one function
#ifdef __cplusplus
extern "C"
{
#endif
void func1();
void func2();
#ifdef __cplusplus
}
#endif
答案 1 :(得分:12)
这是一种C ++表示法,用于告诉编译器/链接器使用C调用标准。
通常该行包含在预处理器语句中。
#ifdef __cplusplus
extern "C" {
#endif
// stuff
#ifdef __cplusplus
}
#endif
答案 2 :(得分:2)
在C中无效。如果在预处理后出现这将导致按照标准进行诊断。
对于C ++来说,这会改变名称。有关可能需要的详细信息,请参阅this。你能发布一些更多细节吗?