为什么 Clang 禁止匿名位字段上的限定符?

问题描述 投票:0回答:1

我有以下测试代码:

struct{
      const int   : 1;
      const int b : 1;
} bit = {0};

int main(void) {
    return bit.b;
}

大多数编译器,包括最新的 GCC,都可以很好地编译它,但是从版本 8 开始,Clang 抱怨匿名位字段上的“const”:

[source]:2:22: error: anonymous bit-field cannot have qualifiers
     const int   : 1;

“易失性”限定符也会发生同样的错误。 Clang 对限定符如此严格的原因是什么?有没有办法消除这个错误?

背景:我有自动生成的“硬件寄存器定义”头文件,它表示未使用的位和匿名位字段,并且诸如“易失性常量”或“易失性”之类的限定符系统地用于寄存器中的所有位。浏览此类文件并手动删除匿名字段上的限定符不是一种选择。

c++ clang qualifiers
1个回答
0
投票

因为 Clang 实现了 CWG2229 (这使得对未命名的位字段使用 cv 限定类型的格式不正确),但 GCC 没有。

Clang 目前无法忽略此错误。这不是有效的 C++,您必须重新自动生成结构(没有限定类型或使用类似

_padding1
的名称)。

© www.soinside.com 2019 - 2024. All rights reserved.