使用预处理器的两个主要原因:
1.一次修改变量,出现的所有的值都会修改。
讲所有常量定义集中在一起。
2.避免函数调用开销。
3.宏定义注意点
1.不能忽视定义中的空格
2.最好将宏定义中每个参数都用括号括起来。整个表达式的结果页用括号括起来。
3.确保调用宏的参数中,不存在有副作用的代码
4.assert宏。可以在出错信息中包含文件名和断言失败处的行号。很有用。
5.宏并不是类型定义。
#define T1 struct foo *
typedef struct foo * T2;
T1 a,b; //struct foo * a, b;
T2 a,b; //a ,b都是指向结构的指针。