我经常遇到包含 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"
是否无意义,与结果的兼容性无关?
extern "C"
并不会"防止"名称混淆。它告诉编译器,除其他事项外,使用C风格的名称混淆。 - Pete Becker