使用extern "C"声明函数后,是否需要同样用其定义?
关于C++中extern "C"的链接属性问题
你不需要在foo.cpp中额外添加extern "C"包裹函数定义,仅靠头文件的声明就足以保证C语言链接(无名称修饰),原因如下:
- 当
foo.cpp(C++源文件)包含foo.h时,预处理器会触发__cplusplus宏,头文件里的extern "C" { ... }代码块会被展开,这已经将int foo(int x);的声明标记为C语言链接属性。 - C++编译器遵循「一次声明决定链接属性」的规则:只要函数的声明带有
extern "C"属性,后续对应的定义会自动继承该链接属性,无需重复声明。
因此foo.cpp只需要这样写就足够:
#include "foo.h" int foo(int x) { // 函数实现代码 }
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

