extern“C”对C有影响吗?

时间:2009-04-04 20:12:32

标签: c++ c extern-c

我刚刚得到了一些使用extern“C”的C代码来声明这样的外部函数:

extern "C" void func();

这是有效的C吗?我在这一行收到错误,但我不确定是不是因为这个或其他原因。

3 个答案:

答案 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。你能发布一些更多细节吗?