c++ - 如果我用 extern "C"声明一个函数,我也应该这样定义它吗?

标签 c++ header forward-declaration function-declaration extern-c

在我的头文件 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/

相关文章:

c++ - openGL/GLSL : bloom/blur, 渲染到 FBO

c++ - 使类指针指向包含它的成员的地址

android - 如何在 openSSL 中将 DER 编码字符串的 vector 转换为 x509

c# - 在 WCF SOAP API 中使用 HTTP 授权 header 进行身份验证

http - 强制浏览器使用 "Save As ..."对话框

c++ - 使用迭代器从 'find' 或 'remove' 删除

c - Typedef 在 header 中无效

c - 如何在 C 中使用前向声明?

C++。 Child 继承自 Parent 并作为 Parent 属性包含在内

ios - 如何在 Objective-C 类中分配 Swift 类中定义的静态对象?