C 变量宏(应为';)';前数值常数
这是实际的宏:C 变量宏(应为';)';前数值常数,c,c-preprocessor,variadic-macros,C,C Preprocessor,Variadic Macros,这是实际的宏: #ifdef DEBUG #define debug(funcname, format, ...) \ printf(BOLD UNDERLINED REVERSE \
#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
其中使用的所有常量都是定义良好的字符串常量。
我称之为:
char message[] = "Hello StackOverflow !\n";
debug("main()", "Message: %s\n", message);
但我明白了
错误:数字常量前应为“')
调试(“main()”,“Message:”,Message)代码>在右括号处插入
这很奇怪,因为我首先测试了宏,现在项目已经与团队一起升级,但它不工作了…这是因为
" LINE " __LINE__ ":"
扩展到语法无效的
" LINE " 42 ":"
因为\uuuuuuuuuuuuuuuuu>是一个整数,而不是可以连接的字符串文字。这是因为
" LINE " __LINE__ ":"
扩展到语法无效的
" LINE " 42 ":"
因为\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>是一个整数,而不是可以串联的字符串。为了帮助您,预定义的名称:\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu(注意小写)将返回函数名,因此您不需要将函数名硬编码到宏调用中Hanks man!我应该考虑到这一点,但预处理器错误消息有时确实难以理解。@NicolasScottoDiPerto您可以使用%d来解决此问题
格式并在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu ARGS\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;或通过对\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu
格式,并将\uuuuuuuuuuuuuuu
移动到###uuuuu VA_uargs uuuuu
展开前的\uuuuuuuuuuuuuuuuu行
。