标签 c预处理操作符 下的文章

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__);
}