Posts Tagged define

c/c++ 带参数(列表)的宏定义

Posted by on 星期六, 12 四月, 2014

引用互联网的资料,首先介绍几个宏:

1)  __VA_ARGS__ 是一个可变参数的宏。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的”,”去掉的作用,否则会编译出错。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称

#define ERRMSG1(fmt,…) sprintf(m_errMsg, fmt, ##__VA_ARGS__)  //按一定格式将字符串放入m_errMsg,使用例子:ERRMSG1(“[debug]i=%d”,i);
#define ERRMSG2(fmt,args…) sprintf(m_errMsg, “[%s 第 %d 行 ]; “fmt”\r\n” , __FILE__, __LINE__, ##args)  //将固定格式的字符串格式化到m_errMsg,将生成“[sqliteHelper.c第2行];”的固定格式,fmt会按args去格式化。

参考:

  1. http://blog.chinaunix.net/uid-22878837-id-2110544.html
  2. http://bbs.csdn.net/topics/390755688