有人可以向我解释下面的C语法(来自这个tutorial)吗?我知道这是C的一个宏,但是" DEBUG%s:%d:" M" \ n"
部分对我来说很奇怪:为什么有宏观参数' M'在格式部分的中间?
#define debug(M, ...) fprintf(stderr,
"DEBUG %s:%d: " M "\n", __FILE__, __LINE__, ##__VA_ARGS__)
答案 0 :(得分:4)
C有一个有趣的怪癖,它连接字符串文字。如果您输入
"DEBUG %s:%d: " "HELLO %s!" "\n"
然后编译器将其视为一个字符串:"DEBUG %s:%d: HELLO %s!\n"
。因此,用户可以像使用printf参数一样使用此宏:
debug("HELLO %s", username); //on line 94 of myfile.cpp
并且宏将自动添加文件名和行号。此格式很有用,因为它可以帮助您了解哪个调试语句正在记录信息。
DEBUG myfile.cpp:94: HELLO zell
答案 1 :(得分:3)
debug("This should never happen!");
评估为
fprintf(stderr, "DEBUG %s:%d: " "This should never happen!" "\n", __FILE__, __LINE__, ##__VA_ARGS__)
哪个连接到......
fprintf(stderr, "DEBUG %s:%d: This should never happen!\n", __FILE__, __LINE__, ##__VA_ARGS__)
所以它打印出类似......
的东西 DEBUG foo.c:51: This should never happen!
答案 2 :(得分:2)