【问题标题】:What does the macro "#define DPRINTF(...)" mean? [duplicate]宏“#define DPRINTF(...)”是什么意思? [复制]
【发布时间】:2019-08-09 23:43:57
【问题描述】:

最近我在工作 IEC 标准代码

我在这里发现了一个类似的问题,但它与这个完全不同。带有 (...) 的宏。

下面是一段代码:

#define DPRINTF(...)

DPRINTF("token end: %p\n", end);

宏“#define DPRINTF(...)”是什么意思?

【问题讨论】:

标签: c++ c linux macros


【解决方案1】:

这称为variadic macro 它允许您将任意数量的参数传递给该宏,并且可以迭代所有这些参数。

正如@user463035818 提到的,您的定义没有做任何事情。因此,对它的调用将被预处理器简单地删除。

修改用法: 您在这里想要做的可能是用于调试输出的类似 printf 的宏。 在这种情况下,您可能需要编写如下内容:

#define DPRINTF(msg, ...) \
  printf("[DEBUG at %s:%s]: %s", __FILE__, __LINE__, msg, __VA_ARGS__);

请注意,这未经测试。 这应该打印以前缀“DEBUG”开头的行以及调用它的文件和行,并结合用户传递的格式文字和您想要的所有参数,例如:

// log something out
DPRINTF("Hello %s\n", "World")

【讨论】:

  • 也许值得一提的是,OP 中定义的宏实际上并没有做任何事情。可能是应该在调试版本中使用的宏的发布版本
  • @user463035818 好主意,我更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多