预处理:
1.C语言中的预编译指令罗列如下:
#define
#undef
#include
#if
#else
#elif
#endif
#ifdef
#ifndef
#line 改变当前行数和文件名称.命令的基本形式如:#line number["filename"]
#error 编译程序时,只要遇到#error就会生成一个编译错误提示消息,并停止编译
#pragma 为实现时定义的命令,它允许向编译程序传送各种指令.例如,编译程序可能有一种选择,它支持对程序执行的跟踪.
可用#pragma语句指定一个跟踪选择.
2.ANSI标准C定义的几个宏:
__LINE__ 表示正在编译的文件的行号;
__FILE__ 表示正在编译的文件的名字;
__DATE__ 表示编译时刻的日期字符串,如:"25 Dec 2007"
__TIME__ 表示编译时刻的时间字符串,如:"12:30:55"
__STDC__ 判断该文件是不是定义成标准C程序
3.#define
3.1数值宏常量
利用宏常量可以实现程序的重用性、可读性.
重用性,如:
#define PI (3.141592653)
在以后代码中尽可能使用PI来替代3.141592653.这样一旦修改PI的精度只需要改一下PI的宏定义值就可以了.
可读性,如:
#define ERROR_POWEROFF (-1)
如果进行重定义在某种情况下出错返回-1别人根本不知道是什么意思,因为很多出错情况下都会返回-1.
3.2定义表达式
定义表达式时一定不要吝啬"()".否则很有可能出错了.
例如:
#define SQR(x) x * x
如果x的值是10,SQR(x)被替换为10 * 10是没有问题的.如果x是一个表达式,比如是10 + 1.那么SQR(x)被展开后
是10+1*10+1,这不是我们预期的结果.
因此,上述宏定义为:
#define SQR(x) ((x) * (x))
3.3.#undef用来撤销宏定义,用法如下:
#define PI 3.141592653
...
//code
#undef PI
//下面的代码就不能用PI了.