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

时间:2019-03-19 12:30:40

标签: c++ c linux macros

最近我正在使用IEC标准代码

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

这是关于此的一段代码:

#define DPRINTF(...)

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

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

1 个答案:

答案 0 :(得分: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")