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行