我有一个这样的宏。
#define TRACE(fmt, ...) trace(__FILE__, __FUNCTION__, fmt, __VA_ARGS__);
但有时我不想提供格式字符串。 像 TRACE() 这样的事情应该做。 现在,我使用
TRACE("%s", "")
有什么办法可以简化吗?
最佳答案
怎么样?
#define TRACE(...) trace(__FILE__, __FUNCTION__, __VA_ARGS__)
TRACE("");
...
省略号必须替换至少一个参数,因此如果您使用 TRACE(fmt, ...)
形式,您不能使用单个参数在调用 TRACE
时。
因此,TRACE(...)
形式通常优于 TRACE(fmt, ...)
形式。
另请注意,我在您的宏定义中删除了 ;
。在定义中包含它是一种不好的做法, ;
必须放在宏调用之后。如果您需要更多信息,请参阅此 CERT 文档:PRE11-C. Do not conclude macro definitions with a semicolon
关于c - 如何在 C 中将变量参数默认设置为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434112/