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

 

posted @ 2017-07-09 18:35  H&K  阅读(176)  评论(0)    收藏  举报