__FINE__ //进行编译的源文件
__LINE__ //文件当前的行号
__DATE__ //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ 如果编译器遵循ANSI C,其值为1,否则未定义。
宏
1.对于数值表达式进行求值的宏定义都应该为参数加上(),避免使用时由于参数的操作符或临近操作符之间不可预料的错误。
2.在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号,
如果是,他先被替换。
3.宏参数和#define定义中可以出现其他的#define定义的变量,但是宏不能出现递归。
4.当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。
#和##
1.使用#,会把一个宏参数变为对应的字符串。
例:
int i=10;
#define PRINT(FORMAT,VALUE)\
printf("the value of "#VALUE"is "FORMAT"\n",VALUE);
PRINT("%d",i+3);
预处理的结果为:
the value of i+3 is 13
2.##可以把位于他两边的符号合成一个符合。
宏和函数
1.宏比函数在程序的规模和速度方面更胜一筹。
2.宏是类型无关的。
~~~
3.宏没法调试。
4.宏由于类型无关,就不够严谨。
翻译过程: