版权声明:本文为博主原创文章,未经博主允许不得转载。 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