两个##,什么意思?
来源:互联网 发布:鞍山北国知春二手房 编辑:程序博客网 时间:2024/04/26 17:13
cpLog_impl_ (priority__, __FILE__, __LINE__, fmt__ , ##args__);
这两个##是做什么的?
##这里起的是字符串链接作用。
放在这里是它的一种特殊用法。表示当args__为空时,去掉前面的逗号。
##不是gcc才有,在一般情况下用于作为宏里的参数和一个字串的连接,在gcc里,##args用于做为不定参数,在C99支持不定参数的宏,但用的符号是__VA_ARGS__,##__VA_ARGS__作用与gcc中的##args完全一样。
比如说有这样一个宏定义:
#define err_log(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__)
这就要求可变参数中到少有一个参数。如果我想这样用
err_log("open file failed/n");
那么经过宏扩展后,就会变成:
fprintf(stderr, "open file failed/n", );
在fprintf的参数列表中最后的逗号后面没有参数。在编译时就会报错。
如果定义成
#define err_log(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
在扩展后就会变成:
fprintf(stderr, "open file failed/n");
这样就不会报错。
看来我要好好看看标准了
- 两个##,什么意思?
- 两个跟踪语句什么意思,求解?
- 请问两个大于号>>代表什么意思?
- 网口有两个灯各代表什么意思
- dirname(__FILE__).'/../popup.php' 这个两个点事什么意思
- dirname(__FILE__).'/../popup.php' 这个两个点事什么意思
- 【BZOJ1821】【JSOI2010】Group 部落划分 Group (两个group什么意思
- Php中两个连续冒号::表示什么意思
- 在VC中的Rect类有两个函数,inflaterect和deflaterect分别表示什么意思?
- 在VC中的Rect类有两个函数,inflaterect和deflaterect分别表示什么意思?
- 数据块上共有两个时间SCN,各表示什么意思
- 泛型方法<T> List<T> methodName(){},两个T分别代表什么意思?
- 活着还有什么意思
- _tmain()什么意思?
- #ifndef到底什么意思?
- lolita,loli什么意思
- "宕机"代表什么意思
- _MSC_VER ????什么意思。。
- 用Java实现Ping的功能(续)
- ##的意思与可变参数宏
- ACM 憾
- 涉猎硬件
- __FUNCTION__,__FILE__,__LINE__
- 两个##,什么意思?
- 解读《创业家》2009年中国创新企业榜TOP100
- sql部分常用函数
- 条件编译的三种格式
- SQL2005 批量修改架构名
- eclipse Myeclipse 快捷键
- MzTreeView 递归遍历 设置指定节点 选中
- c++标准容器类(表格介绍)
- linux字符设备驱动程序设计概述