基本法则
完全代换,不进行语法检查(傻瓜代换)
将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译
分类
- 简单的宏定义:#define 宏名 字符串
例如:#define PI 3.14
注:不可以加任何运算符。否则 运算符将被最为字符串的内容代换进程序中。如上述例子不可以写成 #define PI=3.14,同理,也不可在语句末尾加上“;”。 - 带参数的宏定义: #define 宏名 (<参数表>) 宏体
例如:
#define get(x) x3
主函数中:int a=get(2+3);
则 a=2+33=11
优点
- 易于程序修改,改一处则全部都完成修改
- 完成函数的功能,且更为通用。不需要传参和返回,从而提高运行效率。不检查数据类型,因此都可以传入进行运算。
例如:#define MAX(x,y) ((x)>(y)?(x):(y)) 即可求得x,y中的最大值。 - 对类型重定义,类似于typedef,但是一般还是用typedef
缺点
- 易产生错误。由于代换时不加任何符号,并且不进行语法检查,因此容易产生错误。
- 编译后的代码会变大。
- 与函数不同,不可使用指针指向该宏定义。