【发布时间】:2021-05-23 07:03:49
【问题描述】:
我有以下代码:
#define TRACE_NONE 0
#define TRACE_ERROR 1
#define TRACE_WARNING 2
#define TRACE_INFORMATIONAL 3
#define TRACE_DEBUG 4
#define TINFO(str,cat,...) trace(TRACE_INFORMATIONAL,str,cat,__VA_ARGS__)
#define TWARN(str,cat,...) trace(TRACE_WARNING,str,cat,__VA_ARGS__)
#define TERROR(str,cat,...) trace(TRACE_ERROR,str,cat,__VA_ARGS__)
#define TDEBUG(str,cat,...) trace(TRACE_DEBUG,str,cat,__VA_ARGS__)
在我得到的#define TINFO 行 错误:')' 标记之前的预期主表达式
当我这样使用它时
TINFO("Session start","SES");
编辑:但是如果我提供第三个参数,例如
TINFO("Session start","SES","");
一切正常。
我希望第一个变体起作用
我的跟踪函数签名是这样的:
void trace(int level,const char* sz,const char* cat,...);
如果重要的话
我并没有真正使用__VA_ARGS__ - 我最后一次使用它是在几年前,在查看了几个示例之后,我似乎无法在这里找到我做错了什么。我错过了一些简单的东西 - 我知道我是 - 但我不知道这对我的生活来说是什么。
此代码可以是 GCC 特定的。
【问题讨论】:
标签: c parameter-passing variadic-functions preprocessor