宏__cplusplus使用
宏__cplusplus主要解决C/C++混合编程问题,一般用法如下:
复制代码
1
2
3
4
5
6
7#ifdef __cplusplus extern "C" { #endif … #ifdef __cplusplus } #endif
extern “C”可以抑制C++对函数名、变量名进行名称重整,故编译出的C目标文件和C++目标文件名的函数名、变量名都是相同的,链接器能可靠地对两种类型的目标文件进行链接。
使用上述定义的头文件可以在.c文件中编译,也可以在.cpp文件中编译,它是C/C++混用头文件的典型做法。
注意:__cplusplus是某一个被定义的值,具体如下:
复制代码
1
2
3
4
5
6C++03:__cplusplus = 199711L C++11:__cplusplus = 201103L 所以编译是否使用C++11,可以进行如下定义: #if __cplusplus < 201103L #error “Should use –std=c++11 option for compile #endif
扩展:extern “C”的作用如下:
- 核心作用:实现C和C++的混合编程。extern “C”提供一个链接交换指定符号,用于告诉C++这段函数是C函数,extern “C”后面的函数不使用C++的名字修饰,而是使用C。
- C++支持函数重载,C不支持函数重载。函数被C++编译后在库中的名字与C语言不同。如void add(int a, int b),该函数在C编译器编译后,库中名字为_add,而C++编译器则会生成add_int_int的名字。故C++提供C链接交换指定符号extern “C”来解决名字匹配问题。
- 被extern “C”限定的函数或变量是extern类型,extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,此关键字告诉编译器,该声明的函数可以在本模块或其它模块使用。被extern “C”修饰的变量和函数按照C语言方式编译和链接。
- 与extern对应的关键字是static,被static修饰的全局变量和函数只能在本模块中使用。如果一个函数或变量只能在本模块中使用时,不能用extern “C”修饰。
最后
以上就是光亮河马最近收集整理的关于C++11中__cplusplus特性的全部内容,更多相关C++11中__cplusplus特性内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复