我经常遇到包含extern "C"
保护的C头文件,
但是不包含任何实际的函数。例如:
/* 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"
在兼容性方面是没有意义的吗?
发布于 2015-11-05 00:16:18
一些编译器(这很少见)也为变量实现了名称转换,而不仅仅是函数。在这种情况下,可能需要extern "C"
。
一些编译器(这也很少见,但标准要求)实现了函数类型的语言链接,而不仅仅是名称,所以typedef void f();
和extern "C" { typedef void f(); }
声明了不同的类型。
此外,如果修改头文件来添加函数,一些维护者也不会注意到extern "C"
的缺失。
我建议您只包含它。
发布于 2015-11-05 00:08:50
不,这里不需要extern C
,但是在所有的头中都有它可能更方便,以确保在添加新函数时不会忘记它。
https://stackoverflow.com/questions/33526457
复制相似问题