首页 > 其他分享 >宏_cplusplus

宏_cplusplus

时间:2023-06-06 21:22:23浏览次数:48  
标签:11 cplusplus C++ 编译 编译器 代码

宏_cplusplus
 类别:部分人
在C与C++混合编写的代码中,我们常常会在头文件里看到如下的声明:
#ifdef ___cplusplus
extern "C" {
#endif
// 一些代码
#ifdef__cplusplus
}
#endif
这种类型的头文件可以被 #include 到 C 文件中进行编译,也可以被 #include 到 C++文件中进行编译。由于 extern "C"可以抑制 C++对函数名、变量名等符号(symbol)进行名称重
整(name mangling),因此编译出的C目标文件和 C++目标文件中的变量、函数名称等符号都是相同的(否则不相同),链接器可以可靠地对两种类型的目标文件进行链接。这样该做
法成为了 C与 C++混用头文件的典型做法。鉴于以上的做法,程序员可能认为cplusplus 这个宏只有“被定义了”和“未定义”两种状态。事实上却并非如此,cplusplus 这个宏通常被定义为一个整型值。而且随着标准变化,cplusplus宏一般会是一个比以往标准中更大的值。比如在 C+03 标准中, cplusplus的值被预定为 199711L而在 C+11 标准中,宏cplusplus被预定义为201103L点变化可以为代码所用。比如程序员在想确定代码是使用支持 C++11 编译器进行编译时,那么可以按下面的方法进行检测:
#if_cplusplus < 201103L
#error "should use C++11 implementation"
#endif
这里,使用了预处理指令 #error,这使得不支持 C++11的代码编译立即报错并终止编译。读者可以使用 C+98 编译器和 C+11的编译器分别实验一下其效果。

标签:11,cplusplus,C++,编译,编译器,代码
From: https://www.cnblogs.com/mingzhang/p/17461763.html

相关文章

  • 【cplusplus教程翻译】动态内存
    定义变量使用的内存在程序运行前就确定了,有些时候我们希望能在运行期得到内存,可以使用操作符new和deletenew和new[]new操作符可以分配动态内存,new后面需要跟着数据类型,如果需要多个该数据类型的元素,还需加上方括号,这个操作符返回的是新分配内存的头指针,语法是pointer=newtype......
  • 【cplusplus教程翻译】指针(Pointers)
    在前面的章节中,变量被解释为计算机内存中的位置,可以通过其标识符(名称)访问这些位置。这样,程序就不需要关心内存中数据的物理地址;只要需要引用变量,它就简单地使用标识符。对于C++程序来说,计算机的内存就像一系列的存储单元,每个存储单元的大小都是一个字节,并且每个存储单元都有一个......
  • 【cplusplus教程翻译】多态(Polymorphism)
    多态(Polymorphism)学习本章之前,需要正确理解指针和继承,如果忘记下面表达式的含义,需要回顾之前的章节基类指针(Pointerstobaseclass)继承的一个关键特性就是派生类的指针可以类型安全地转换成基类指针,多态就是利用这个简单通用特性的艺术//pointerstobaseclass#include<......
  • //#ifdef __cplusplus extern "C" 含义
    #ifdef__cplusplusextern"C"{#endif#import<UIKit/UIKit.h>@interfaceViewController:UIViewController@property(nonatomic,readonly)UIView*headView;@end//#ifdef__cplusplusextern"C"{#endif//一段代码#ifdef__cplu......
  • 【cplusplus教程翻译】名字可见性(Name visibility)
    作用域(Scopes)命名实体,如变量、函数和复合类型,在C++中使用之前需要声明。程序中发生此声明的点会影响其可见性:在任何块外部声明的实体都具有全局作用域,这意味着其名称在代码中的任何位置都是有效的。而在块内声明的实体,如函数或选择性语句,具有块作用域,并且只能在声明它的特定块内......
  • 解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题
    00.软件环境VisualStudio2022,VisualC++,Version17.5.401.问题描述在应用https://github.com/ToniLipponen/cpp-sqlite的过程中,发现源代码文件sqlite.hpp中,有一处宏,和本项目的C++LanguageStandard有关,如下图所示:将鼠标悬停在__cplusplus这个宏上,可以看到它......
  • 【c&c++】#ifdef __cplusplus extern “C”的作用详解
    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern"C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因......
  • 《__cplusplus修饰符的作用:C和CPP接口互相调用时候,编译没问题,链接提示未定义问题》
    关于__cplusplus修饰符说明如下:__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入......