案例标签是否允许下划线?

pmo*_*mod 5 c coding-style coverity-prevent

在一些我无法修改的头文件中,我有以下一组定义:

#define FLAG1                      (0x0000_0001)
#define FLAG2                      (0x0000_0002)
...
Run Code Online (Sandbox Code Playgroud)

然后,在我的代码中我在switch中使用它们:

switch (aaa) {
    case FLAG1:
    ....

    case FLAG2:
    ....
}
Run Code Online (Sandbox Code Playgroud)

因此,Coverity报告每个案例标签有2个缺陷:

RW.EXP_RPAREN: 
Event exp_rparen: expected a ")"

RW.CASE_LABEL_CONFLICT:
Event case_label_conflict: case label value has already appeared in 
this switch at line XX
Run Code Online (Sandbox Code Playgroud)

这些案例标签有什么问题?它违反了C标准吗?

pax*_*blo 5

是的,你可以有括号.什么,你不会允许有一个数字,如0x0000_0001.

这不是有效的十六进制数,你可能必须删除该_字符.


Joh*_*ode 3

是的,正是下划线引起了问题。FWIW,以下是 C 语言标准(草案n1256 )的相关部分:

  • § 6.4.4.1 整型常量:定义整型常量的结构并显示_不是整型常量的有效字符;
  • § 6.6 常量表达式:定义常量表达式的限制;
  • § 6.8.4.2语句:定义语句中标签switch的限制。caseswitch