【发布时间】:2015-11-18 06:49:03
【问题描述】:
每次,我调用下面的 C 调试宏,我都必须传递一些参数。否则编译失败。
#include <stdio.h>
#include <stdlib.h>
#define debug(fmt, ...)\
do{\
fprintf(stdout, "%s(%d) : " fmt, __FUNCTION__, __LINE__, __VA_ARGS__);\
}while(0)
int
main()
{
debug("Debug 1");
}
这是编译错误:
test.c:12:5: 错误:预期表达式 调试(“调试 1”); ^ test.c:6:70: 注意:从宏“调试”扩展 fprintf(stdout, "%s(%d) : " fmt, FUNCTION, LINE, VA_ARGS);\ ^ 产生 1 个错误。
如果我使用参数调用相同的宏:
debug("Debug 1 %s", "");
它编译得很好,没有问题。是因为编译器吗?它在最新的编译器中工作吗?
【问题讨论】:
-
顺便说一句,请不要将 C 问题标记为 c++。这是两种不同的语言。
-
请参阅C
#definemacro for debug printing,了解有关调试打印宏的全面讨论。请特别注意“单参数变体”和“GCC 特定技术”部分。