Tre*_*key 18 c c++ header-files extern extern-c
我经常遇到包含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 */
Run Code Online (Sandbox Code Playgroud)
我知道这extern "C"
可以防止对函数进行名称修改,但它是否也可以防止变量和类型声明的其他接口问题?
extern "C"
在产生兼容性方面,上述示例中的使用是否毫无意义?
小智 23
有些编译器(很少见)也会为变量实现名称修改,而不仅仅是函数.在这种情况下,extern "C"
可能需要.
一些编译器(它也是罕见的,但标准所要求的)实现联动语言的函数类型,不只是名字,所以typedef void f();
并extern "C" { typedef void f(); }
声明不同的类型.
此外,一些维护者不会注意到extern "C"
他们是否修改标头以添加功能.
我建议你只包括它.
归档时间: |
|
查看次数: |
905 次 |
最近记录: |