我是靠谱客的博主 光亮河马,最近开发中收集的这篇文章主要介绍C++11中__cplusplus特性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

宏__cplusplus使用

宏__cplusplus主要解决C/C++混合编程问题,一般用法如下:

#ifdef __cplusplus
extern "C" {
#endif
…
#ifdef __cplusplus
}
#endif

extern “C”可以抑制C++对函数名、变量名进行名称重整,故编译出的C目标文件和C++目标文件名的函数名、变量名都是相同的,链接器能可靠地对两种类型的目标文件进行链接。

使用上述定义的头文件可以在.c文件中编译,也可以在.cpp文件中编译,它是C/C++混用头文件的典型做法。

注意:__cplusplus是某一个被定义的值,具体如下:

C++03:__cplusplus = 199711L
C++11:__cplusplus = 201103L
所以编译是否使用C++11,可以进行如下定义:
#if __cplusplus < 201103L
       #error “Should use –std=c++11 option for compile
#endif

扩展:extern “C”的作用如下:

  1. 核心作用:实现C和C++的混合编程。extern “C”提供一个链接交换指定符号,用于告诉C++这段函数是C函数,extern “C”后面的函数不使用C++的名字修饰,而是使用C。
  2. C++支持函数重载,C不支持函数重载。函数被C++编译后在库中的名字与C语言不同。如void add(int a, int b),该函数在C编译器编译后,库中名字为_add,而C++编译器则会生成add_int_int的名字。故C++提供C链接交换指定符号extern “C”来解决名字匹配问题。
  3. 被extern “C”限定的函数或变量是extern类型,extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,此关键字告诉编译器,该声明的函数可以在本模块或其它模块使用。被extern “C”修饰的变量和函数按照C语言方式编译和链接。
  4. 与extern对应的关键字是static,被static修饰的全局变量和函数只能在本模块中使用。如果一个函数或变量只能在本模块中使用时,不能用extern “C”修饰。

最后

以上就是光亮河马为你收集整理的C++11中__cplusplus特性的全部内容,希望文章能够帮你解决C++11中__cplusplus特性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部