最近我正在使用IEC标准代码
我在这里发现了一个类似的问题,但与这个问题并不完全相同。带有(...)的宏。
这是关于此的一段代码:
#define DPRINTF(...)
DPRINTF("token end: %p\n", end);
宏“ #define DPRINTF(...)”是什么意思?
答案 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")