16.为什么标准头文件都有类似以下的结构?
来源:互联网 发布:php电影播放器源码 编辑:程序博客网 时间:2024/06/05 16:36
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
答:头文件中的
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif /* __INCvxWorksh */
是为了防止该头文件被重复include。
头文件中的
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
是说明C++程序要调用C语言的函数。
C++支持重载,而C不支持,他们在编译后的符号表里的表示方法不同。例子:
void foo(int x, int y);
在C语言里中,编译后符号表中为_foo;而C++中编译后符号表中为_foo_int_int,不仅包含函数名,还包括形参类型,用此来
区分重载函数。
在C/C++混合编程中,extern "C"有两种用法:
1)在C++中定义函数,编译成库,然后再编写一个C程序来调用刚才写的C++库,那么链接报错,解决办法是在C++中的每个函数定义
(注意是定义,就是说在实现函数的地方)前声明extern "C",告诉编译器,你给我按C语言的形式编译,此处不需使用#ifdef __cplusplus。
2)在C中定义函数,编译成库,然后编写一个C++程序来调用刚才写的C库,那么链接时报错,解决办法是在C中每个函数的声明(注意是声明,一般在头文件里)
为了方便,通常在头文件中整体做,使用
#ifdef __cplusplus
extern "C" {
#endif
....
#endif
/*...*/
#ifdef __cplusplus
}
#endif
告诉编译器,如果是C++过来用我,那么他得用C语言形式来用我。
大部分总结都没有我这个细致,其实extern "C"是有这2中用法的。
- 16.为什么标准头文件都有类似以下的结构?
- 为什么C++标准头文件都有类似以下的结构?
- 标准头文件结构
- c++标准头文件的结构
- C++标准头文件 结构介绍
- 浅析C++标准头文件结构
- 浅析C++标准头文件结构
- C++标准头文件结构介绍
- 浅析C++标准头文件结构
- C++标准头文件结构介绍
- 标准库函数的头文件
- 解决c++头文件结构类似嵌套问题
- 想学习C++的童鞋们,不得不看看‘标准库头文件’有哪些
- 1.2 头文件的结构
- 查找当前目录以下重复的头文件并输出
- 头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加
- 为什么在头文件中有extern "C" ?
- 为什么头文件中都有 #ifndefine #define #endif
- 通过eclipse卸载系统应用、文件的导出导入操作以及elcipse操作常见问题分析
- Catalan(卡特兰数)
- SEO优化示例程序
- HDU 1520 Anniversary party (树形DP)
- 二分查找之天平称重,称出最重的小球
- 16.为什么标准头文件都有类似以下的结构?
- CentOS额外软件库
- Oracle中su切换进去sqlplus登录失败的问题处理
- SSZipArchive使用详解
- 感知机——R实现
- 字符串比较函数
- Android调用WCF
- unity之NPC对话
- C++命名规则