使用Clang,这段代码编译得很好,没有错误也没有警告:
static const int ZERO = 0;
int main() {
switch (0) {
case ZERO: break;
}
}但是对于GCC,我得到了一个错误:
<source>: In function 'main':
<source>:5:9: error: case label does not reduce to an integer constant
5 | case ZERO: break;
| ^~~~为什么会这样呢?
注意:在这种情况下,我可以只使用#define,但是我想知道为什么在这里Clang和GCC的行为是不同的。
我使用的是Apple Clang 11.0.3 (似乎是通过Xcode安装的)和GCC 10.2.0,但我能够在带有Clang干线和GCC干线的Godbolt上重现这个问题。无论是在本地还是在Godbolt中,我都使用x86-64。
发布于 2021-02-08 11:27:40
这是在侧边栏中的:
switch case: error: case label does not reduce to an integer constant
显然这种情况下的'const‘不是一个常量表达式,而是一个常量变量...好了,看看这篇文章吧。看起来clang有不同的规则。在多个编译器上编译总是很好的另一个原因。
https://stackoverflow.com/questions/66095538
复制相似问题