11

我使用以下联合来简化字节、半字节和位操作:

union Byte
{
  struct {
    unsigned int bit_0: 1;
    unsigned int bit_1: 1;
    unsigned int bit_2: 1;
    unsigned int bit_3: 1;
    unsigned int bit_4: 1;
    unsigned int bit_5: 1;
    unsigned int bit_6: 1;
    unsigned int bit_7: 1;
  };

  struct {
    unsigned int nibble_0: 4;
    unsigned int nibble_1: 4;
  };

  unsigned char byte;
};

它工作得很好,但它也会产生这个警告:

警告:ISO C++ 禁止匿名结构 [-pedantic]

好的,很高兴知道。但是......如何从我的 g++ 输出中得到这个警告?有没有可能在没有这个问题的情况下写出类似这个联盟的东西?

4

1 回答 1

11

gcc 编译器选项-fms-extensions将允许非标准匿名结构没有警告。

(该选项启用了它认为的“Microsoft 扩展”

您也可以使用此约定在有效的 C++中实现相同的效果。

union Byte
{
  struct bits_type {
    unsigned int _0: 1;
    unsigned int _1: 1;
    unsigned int _2: 1;
    unsigned int _3: 1;
    unsigned int _4: 1;
    unsigned int _5: 1;
    unsigned int _6: 1;
    unsigned int _7: 1;
  } bit;
  struct nibbles_type {
    unsigned int _0: 4;
    unsigned int _1: 4;
  } nibble;
  unsigned char byte;
};

有了这个,你的非标准byte.nibble_0就变成了合法的byte.nibble._0

于 2013-04-24T21:38:40.960 回答