可变参数的宏
2015-06-27 11:03
260 查看
参考自:
/article/5904660.html
http://blog.csdn.net/aobai219/article/details/6092292
http://www.cnblogs.com/MarvinGeng/archive/2012/07/19/2598923.html
可变参数的宏:
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. 两者结合就可以生成很有用的调试输出宏,像这样:
View Code
/article/5904660.html
http://blog.csdn.net/aobai219/article/details/6092292
http://www.cnblogs.com/MarvinGeng/archive/2012/07/19/2598923.html
可变参数的宏:
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. 两者结合就可以生成很有用的调试输出宏,像这样:
#define __DEBUG__ #ifdef __DEBUG__ #define DEBUG(format,...) printf("Line:%4d Time:"__TIME__" " format"\n",__LINE__,##__VA_ARGS__) #else #define DEBUG(format,...) #endif
View Code
相关文章推荐
- 欢迎大家来拍砖
- 日语学习之沪江N3基础 20150627 -1
- MySQL错误代码大全
- myeclipse报错:Building workspace' has encountered a problem. Errors occurred during the build
- Docker基本术语
- svn 命令大全
- redis与memcache的区别
- 篇一、安装配置Android Studio
- Bash脚本中的操作符
- Linux gcc参数说明
- http 返回码 405 解决方案之一
- 软件工程与回答
- 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
- VS2013常用快捷键
- antlr.collections.AST.getLine()I错
- Linux内存管理模型
- interface & implementation demo in Java
- 如何用ps换照片背景?PS换背景方法
- LeetCode | Find Minimum in Rotated Sorted Array
- Collections.sort的两种用法