预处理器
1. 预定义符号:
__FILE__ | 源文件名字 |
__LINE__ | 文件当前行号 |
__DATE__ | 文件被编译的日期 |
__TIME__ | 文件被编译时间 |
__FUNCTION__ | 输出当前函数名称 |
__STDC__ | 如果编译器遵循 ANSIC,返回值为 1 |
int main(void){ printf("%s\n",__FUNCTION__); return 0; } /*
输出结果:main
*/
2. #define 的使用
宏定义是文本的替换,注意:文本替换值将宏定义的内容更换了一个名字,在预编译时,进行替换操作,因此在使用时,尤其是带参宏,将参数带入比较是否是自己需要的运算。
注: 带参宏的参数一定要使用括号括起来,表达式也要使用括号括起来,否则当参数是一个表达式时,可能会出现异常的结果,最简单的办法就是将参数使用宏定义替换,看是否能得到预期结果。
#define MAX(A,B) ( (A) > (B) ? (A) : (B)))
3. 单参数的宏的数据类型:宏中的参数是没有类型的,只要参数合法,可以使用任何类型,这点是相比较调用函数的优势,因为函数传参要指定参数类型。
#define MALLOC(n,type) \ ( (type *)malloc( (n) * sizeof(type) ) )
//--eg
pi = MALLOC(25, int );
4. # 的使用
宏定义中 ‘#’ 符号能将参数变为 字符串文本
#define PRINTF(FORMAT,VALUE) \ printf("the value of " #VALUE "is" FORMAT "\n",VALUE)
int main(void){
int x = 5;
PRINTF("%d", x + 5);
}
/**
输出结果: the value of x + 5 is 10
*/