预处理是在程序源代码被编译之前,由预处理器(Preprocessor)对程序源代码进行的处理。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的符号用来支持宏调用。
C提供的预处理主要有三种——宏定义、文件包含和条件编译。
宏定义的核心就是替换
1. 用无参宏定义一个简单常量
eg. #define LEN 12
几个重要的知识点
1)#define NAME “XXX”
Q:如果程序中有“NAME”会不会被替换?
A:不能替换程序中字符串里的东西
2)#define int 1234
Q:能否将标识符的字符替换为别的东西
A:宏定义前面那个必须是合法的用户标识符
3)#define NAME “XXX
Q:这样可以吗?
A:不能把字符串的两个”“拆开
2. 带参宏的一般用法
#define MAX(a , b) ((a) > (b) ? (a) : (b))
则遇到MAX(1+2, 2+3)则会替换成:
((1+2) > (2+3) ? (1+2) : (2+3))
所以注意加括号
3. 多行宏定义:
#define doit(m,n) for(int i=0;i<(n);++i)\
{\ m+=i;\}
还有
#define F(a) "a"
Q:F(555)会被替换成什么?
A:是无论a取何值,都会被替换成”a“
Q:若想替换成”555“怎么办呢?
A:#define F(a) #a
# 为后面的宏形参添加双引号
#@ 为后面的宏形参添加单引号
## 连接##前后的两个宏形参
例子:
结果: