我用gcc 8.2编译此代码时收到此错误:
#define literal "string"
switch(i) {
case literal[0]:
break;
}
Run Code Online (Sandbox Code Playgroud)
在我的示例中,编译器能否将表达式literal [0]减少为“ s”?
C2011 6.4.8.2p3要求每个case标签的表达式都是整数常量表达式。整数常量表达式是常量表达式的受限子集,如6.6p6节所述。字符串文字可能不会出现在整数常量表达式中。
6.4.8.2p3是“约束”段落,因此该程序格式错误。
因此,正如您所问的那样,您的问题的答案是:编译器可以简化"string"[0]为's',但不允许这样做;必须拒绝您的程序。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |