C++ анонимные структуры

Я использую следующее объединение, чтобы упростить байтовые, полубайтовые и битовые операции:

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 ++? Есть ли возможность написать что-то вроде этого союза без этой проблемы?

1 ответ

Решение

Опция компилятора 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

Другие вопросы по тегам