首页 > 其他 > 详细

可变参数的宏

时间:2015-06-27 11:32:34      阅读:105      评论:0      收藏:0      [点我收藏+]

参考自:

http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html

http://blog.csdn.net/aobai219/article/details/6092292

http://www.cnblogs.com/MarvinGeng/archive/2012/07/19/2598923.html

感谢lizezheng、TONGGETONGGE、MarvinGeng的指引!

 

可变参数的宏:

1. 可变参数的宏是C99规范开始支持的,具体用法如下:

        #define debug(…) printf(__VA_ARGS__)

    缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__ 把参数传递给宏。当宏的调用展开时,实际的参数就传递给 printf() 了。

    如果缺省号之前有逗号,就要写成下面的形式:

        #define DEBUG(format, ...) printf (format, ##__VA_ARGS__)

    ‘ ## ‘的意思是,如果可变参数被忽略或为空,将使预处理器(preprocessor)去除掉它前面的那个逗号。

2. 编译器内置的宏定义:

ANSI C的标准预定义宏:

__DATE__ : 以“月 日 年”的格式替换为当前日期,类型为字符串

__FILE__  : 替换为当前源文件名包括路径,类型为字符串

__LINE__ : 替换为当前行号,可以结合#line进行设置,#line之后的数字代表#line下一行的行号,之后行号以此类推,类型为整型值

__STDC__ : 当要求程序严格遵循ANSI C标准时该标识被赋值为1

__TIME__ : 以“时:分:秒”的格式替换为当前时间,类型为字符串

__TIMESTAMP__ : 以”星期  月  日  时:分:秒 年“的格式替换为最后一次修改当前源文件的时间,类型为字符串

详细描述见:

https://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx

3. 两者结合就可以生成很有用的调试输出宏,例如:

技术分享
1 #define __DEBUG__  
2 #ifdef __DEBUG__  
3 #define DEBUG(format,...) printf("Line:%4d     Time:"__TIME__"    " format"\n",__LINE__,##__VA_ARGS__)  
4 #else  
5 #define DEBUG(format,...)  
6 #endif 
View Code

 

 

 

 

 

 

可变参数的宏

原文:http://www.cnblogs.com/reasno/p/4603470.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!