Nic*_*rto 1 c c-preprocessor variadic-macros
这是实际的宏:
#ifdef DEBUG
#define debug(funcname, format, ...) \
printf(BOLD UNDERLINED REVERSE \
"DEBUG IN " __FILE__ \
" LINE " __LINE__ ":" \
RESET UNDERLINED REVERSE \
"In " funcname \
RESET REVERSE format RESET, ##__VA_ARGS__)
#else
#define debug(funcname, format, ...)
#endif
Run Code Online (Sandbox Code Playgroud)
所有使用的常量都是明确定义的字符串常量.我称之为:
char message[] = "Hello StackOverflow !\n";
debug("main()", "Message: %s\n", message);
Run Code Online (Sandbox Code Playgroud)
但是我收到了消息
error: expected ‘)’ before numeric constant
debug("main()", "Message: ", message); 在最后的括号中徘徊.
这很奇怪,因为我第一次测试宏,现在项目已经与团队一起推进它不起作用......
那是因为
" LINE " __LINE__ ":"
Run Code Online (Sandbox Code Playgroud)
扩展到语法无效
" LINE " 42 ":"
Run Code Online (Sandbox Code Playgroud)
因为__LINE__是一个整数,而不是可以连接的字符串文字.