错误:对于从字符串文字中选择的字符,大小写标签没有减少为整数常量

Rem*_*emy 1 c gcc

我用gcc 8.2编译此代码时收到此错误:

#define literal "string"
switch(i) {
case literal[0]:
break;
}
Run Code Online (Sandbox Code Playgroud)

在我的示例中,编译器能否将表达式literal [0]减少为“ s”?

zwo*_*wol 5

C2011 6.4.8.2p3要求每个case标签的表达式都是整数常量表达式。整数常量表达式是常量表达式的受限子集,如6.6p6节所述。字符串文字可能不会出现在整数常量表达式中。

6.4.8.2p3是“约束”段落,因此该程序格式错误。

因此,正如您所问的那样,您的问题的答案是:编译器可以简化"string"[0]为's',但不允许这样做;必须拒绝您的程序。