C++预处理器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013043408/article/details/83684663

预处理器是一些指令,指示编译器在实际编译之前所需完成的处理。

#define

define用于定义宏。宏是一个代码级的文本替换,因为替换发生在编译之前。

神奇的例子,来猜猜输出结果。

#define STR(s) #s            //# 会给 s 加上双引号 "s"
#define CONCAT(x, y) x##y    //## 是将x和y拼接在一起
#define X(a) a               //带参数的宏  	

//main函数中
cout << STR(hello world) << endl;	
cout << "CONCAT(1, 2) = " << CONCAT(1, 2) << endl; 	
CONCAT(in, t) i = 1;	
cout << "i = " << i << ", type: " << typeid(i).name() << endl; 	
X(double) j = 3.14;	
cout << "j = " << j << ", type: " << typeid(j).name() << endl;

输出:

hello world
CONCAT(1, 2) = 12
i = 1, type: int
j = 3.14, type: double

很有用的C++宏

这些宏对于打印错误日志很有用,可以定位到某个文本,某行,甚至程序的编译日期。

描述
LINE 当前行
FILE 当前文件名
DATA 程序编译日期
TIME 程序编译时间

条件编译

简述了,确实要有点基础才能懂。不过没关系,后边有例子。

指令 描述
#ifdef XXX 如果定义了宏XXX
#ifndef XXX 如果没有定义宏XXX
#if XXX 如果表达式XXX为真
#elif XXX 否则,如果表达式XXX为真
#else 否则
#endif 结束标志

如果没有定义 XXX 这个宏,代码块有效;否则,代码块无效。

#ifndef XXX		
    //代码块
#endif

如果(1==1)为真,则代码块1有效,否则代码2有效。

#if (1==1)
    //代码块1
#else
    //代码块2
#endif

猜你喜欢

转载自blog.csdn.net/u013043408/article/details/83684663