【发布时间】:2021-08-11 14:48:55
【问题描述】:
有没有办法定义一个使变量参数列表无效的宏?
#define VOID_ARGS(...) ((void)##__VA_ARGS__)
当警告被视为错误时,用例是用于抑制编译器错误 [-Werror=unused-value] 的 void 参数:
#define DEBUG 1
#ifdef DEBUG
#define func(fmt, ...) dbg_func(fmt, ##__VA_ARGS__)
#else
#define func(fmt, ...) VOID_ARGS(fmt, ##__VA_ARGS__)
#endif
【问题讨论】:
-
“空白”是什么意思?如果您不想使用参数,请不要使用
__VA_ARGS__。另请注意,##__VA_ARGS__是非标准 gcc 扩展。 -
您到底想达到什么目标?请发布一个示例,您希望如何使用这样的宏
-
大概 OP 想告诉编译器没有使用参数,这样它就不会抱怨或发出警告。这有时可以在函数体中使用
(void)unused;来完成,并且 OP 希望有一个可变参数宏来为多个变量执行此操作。 -
#define func(fmt, ...)后面没有任何内容怎么样,例如一个空的宏?那应该用;替换func("abc", 4, 3, "bla");。 -
编译器会抱怨未使用的宏参数吗?
标签: c macros preprocessor variadic-macros