c - 如何在 C 中将变量参数默认设置为空?

标签 c

我有一个这样的宏。

#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/

相关文章:

c - C程序中出现段错误

c - 在 C 中加起来 1/2 + 2/3 +...+ 18/19 + 19/20

c - 结构体数组中矩阵的动态内存分配

c++ - 如何通过 SWIG 创建对已包装库的扩展?

c - 如何删除 typedef 结构数组?

c - 带描述符的 free() 函数

c - 两个链表相乘输出错误

c - 看不懂struct Barnyard2的sf_ip头文件

c - 在 C 中添加 0101 和 5 背后的逻辑是什么?

c - 使用链表的 RPN 计算器