c预处理操作符,预定义宏和其他指令
预处理操作符
c语言中有两个预处理操作符#
和##
,他们可以在#define
中使用
操作符#
通常称为字符串化的操作符,它把其后的串变成用双引号包围的串
连接操作符##
可以把两个独立的字符串连接成一个字符串
示例
#define PRINT(FORMAT,VALUE) printf("the value of"#VALUE"is"FORMAT"\n",VALUE)
#define ADD_TO_SUM(sum_number,value) sum##sum_number+=value
案例
源码
#define PRINT(FORMAT,VALUE) printf("the value of "#VALUE" is "FORMAT"\n",VALUE)
#define ADD_TO_SUM(sum_number,value) sum##sum_number+=value
int main(void)
{
PRINT("%d",888);
int sum222 = 222;
ADD_TO_SUM(222,666);
PRINT("%d",sum222);
return 0;
}
预处理后的代码
int main(void)
{
printf("the value of ""888"" is ""%d""\n",888);
int sum222 = 222;
sum222+=666;
printf("the value of ""sum222"" is ""%d""\n",sum222);
return 0;
}
预定义宏
__FILE__
进行编译的文件名__LINE__
文件当前行的行号__DATE__
文件被编译的日期(格式为"Mmm dd yyyy")__TIME__
文件被编译的时间(格式为"hh:mm:ss")__func__
当前所在函数名
其他预定义指令
#error
#line
#pragma
示例
#include <stdio.h>
/*
// 下面这句会中断程序的编译
// 与 __LINE__ 配合使用,设置了这个之后,下面的 __LINE__ 会输出1003
#error "this is a test!!"*/
#line 1000
// 在编译时会输出下面的信息
#pragma message("this is a pragma message")
int main(void)
{
printf("__FILE__ = %s\n",__FILE__);
printf("__LINE__ = %d\n",__LINE__);
printf("__DATE__ = %s\n",__DATE__);
printf("__TIME__ = %s\n",__TIME__);
printf("__func__ = %s\n",__func__);
}