首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Clang接受` `static const`作为case标签,而GCC不接受?

为什么Clang接受` `static const`作为case标签,而GCC不接受?
EN

Stack Overflow用户
提问于 2021-02-08 11:22:18
回答 1查看 77关注 0票数 1

使用Clang,这段代码编译得很好,没有错误也没有警告:

代码语言:javascript
复制
static const int ZERO = 0;

int main() {
    switch (0) {
        case ZERO: break;
    }
}

但是对于GCC,我得到了一个错误:

代码语言:javascript
复制
<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。

EN

回答 1

Stack Overflow用户

发布于 2021-02-08 11:27:40

这是在侧边栏中的:

switch case: error: case label does not reduce to an integer constant

显然这种情况下的'const‘不是一个常量表达式,而是一个常量变量...好了,看看这篇文章吧。看起来clang有不同的规则。在多个编译器上编译总是很好的另一个原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66095538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档