在我的头文件 foo.h
中,我有:
#ifdef __cplusplus
extern "C" {
#endif
int foo(int x);
#ifdef __cplusplus
}
#endif
现在,在 foo.cpp
中,我是否还应该使用 extern "C"
,并定义:
#include "foo.h"
extern "C" {
int foo(int x);
};
?或者声明是否足以确保 C 链接(无名称修改)?
最佳答案
通过 extern "C"
标记声明就足够了。
如果包含函数声明的翻译单元具有 extern "C"
,编译器最终遇到实现时将尊重这一点 - 并在对象内使用非重整符号文件。
请参阅 GodBolt .
但请记住,如果您的实现没有看到您的 header ,并且您不明确这样做,则任何内容都不会使其成为 extern "C"。
关于c++ - 如果我用 extern "C"声明一个函数,我也应该这样定义它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74069616/