1.预处理的主要任务包括,删除注释,插入被#include指令包含的文件的内容,定义和替换由#define指令定义的符号以及确定代码的部份内容是否应该更具一些条件编译指令进行编译。
2.警告的总结:
- 1.不要在一个宏定义的末尾加上分号,使其成为一条完整的语句。
- 2.在宏定义中使用参数,但忘了在它们周围加上括号,这样会导致操作顺序发生变化
- 3.注意在整个宏定义的两边加上括号。
3.编程的总结:
- 1.避免采用#define指令定义可以用函数实现的很长序列的代码
- 2.在那些对表达式求值的宏中,每个宏参数出现的地方都应该加上括号,并且在整个宏定义两边也加上括号。
- 3.避免使用#define宏创建一种新语言。
- 4.采用命名约定,使我们可以很容易看出某个标识符是函数宏还是函数。
- 5.只要合适就应该使用文件包含,不必担心他们的文件开销
- 6.头文件只应包含一组函数和(或)数据的声明。
- 7.把不同集合的声明分离到不同的头文件中可以改善信息隐藏
- 8.嵌套的#include文件使我们很难判断源文件之间的依赖关系
- 9.注意防止头文件二次引入
- 10.嵌套指令#if 与 #endif必须成对存在
- 11.注意带副作用的宏参数,即宏参数在宏定义中出现次数超过一次时需特别注意。
- 12.注意区分使用函数与使用函数宏的优缺点
- 13.宏替换时一定要注意。
4.编程技巧:
- 1.系统宏定义来定位文件名和行号打印出错信息!__FILE__ __LINE__
- 2.在头文件指定__DEBUG 才会输出错误信息或者在gcc 编译时加-D选项
- #ifdef __DEBUG__
- 错误输出
- #endif
- 3.__DATE__ __TIME__可用来添加版本信息
关于C语言预处理的一点总结