首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有理由在没有方法的头上使用外部"C“?

有没有理由在没有方法的头上使用外部"C“?
EN

Stack Overflow用户
提问于 2015-11-05 00:02:56
回答 2查看 974关注 0票数 18

我经常遇到包含extern "C"保护的C头文件,

但是不包含任何实际的函数。例如:

代码语言:javascript
复制
/* b_ptrdiff.h - base type ptrdiff_t definition header */

#ifndef __INCb_ptrdiff_th
#define __INCb_ptrdiff_th

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _PTRDIFF_T
#define _PTRDIFF_T
typedef long ptrdiff_t;
#endif /* _PTRDIFF_T */

#ifdef __cplusplus
}
#endif

#endif /* __INCb_ptrdiff_th */

我知道extern "C"可以防止函数的名称损坏,但它是否也可以防止变量和类型声明的其他接口问题?

在上面的例子中使用extern "C"在兼容性方面是没有意义的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-05 00:16:18

一些编译器(这很少见)也为变量实现了名称转换,而不仅仅是函数。在这种情况下,可能需要extern "C"

一些编译器(这也很少见,但标准要求)实现了函数类型的语言链接,而不仅仅是名称,所以typedef void f();extern "C" { typedef void f(); }声明了不同的类型。

此外,如果修改头文件来添加函数,一些维护者也不会注意到extern "C"的缺失。

我建议您只包含它。

票数 23
EN

Stack Overflow用户

发布于 2015-11-05 00:08:50

不,这里不需要extern C,但是在所有的头中都有它可能更方便,以确保在添加新函数时不会忘记它。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33526457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档