c语言中宏
一.宏参数的字符串化和宏参数的连接
在宏定义中,有时还会用到#和##两个符号,它们能够对宏参数进行操作
#的用法
#define STR(s) #s
那么
printf("%s",STR(php))
printf("%s",STR("php"))
展开后为
printf("%s","php")
printf("%s","\"php"\")
可以发现,即使给宏参数“传递”的数据中包含引号,使用#仍然会在两头添加新的引号,而原来的引号会被转义
##的用法
##称为连接符,用来将宏参数或其他的串连接起来
#define CON1(a,b) a##e##b
#define CON2(a,b) a##b##00
那么
printf("%f",CON1(2.1,2));
printf("%d\n",CON2(12,34));
展开后为
printf("%f\n",2.1e2 );
printf("%d\n",123200 );
#include <stdio.h> #define STR(s) #s #define CON1(a,b) a##e##b #define CON2(a,b) a##b##00 int main(){ printf("%s\r\n",STR(php)); printf("%s\r\n",STR("php")); printf("%f\r\n",CON1(1.1,2)); printf("%d\r\n",CON2(23,45)); } 执行结果 php "php" 110.000000 234500
c语言中几个预定义的宏
ANSI C 规定了以下几个预定义宏,它们在各个编译器下都可以使用:
__LINE__:表示当前源代码的行号
__FILE__:表示当前源文件的名称;
__DATE__:表示当前的编译日期;
__TIME__:表示当前的编译时间;
__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义
代码
#include <stdio.h> int main(){ printf("date:%s\r\n",__DATE__); printf("time:%s\r\n",__TIME__); printf("file:%s\r\n",__FILE__); printf("line:%d\r\n",__LINE__); } 执行结果 date:Jun 28 2017 time:19:38:23 file:deff.c line:7

浙公网安备 33010602011771号