Я пытаюсь построить следующий код:
#include <stdint.h>
int main()
{
union {
uint32_t cw : 13;
struct {
uint32_t setting4 : 4;
uint32_t cmd : 9;
};
struct {
uint32_t setting8 : 8;
uint32_t cmd : 5;
};
} control;
return 0;
}
который определяет 13-битное кодовое слово, которое состоит из нескольких полей с перекрывающимися интерпретациями.
Я ожидаю, что сборка не удастся из-за дублирования объявления cmd
поле в двух структурах. Удивительно, но MSVC 2012 не сообщает об ошибке.
В качестве проверки работоспособности я проверил код в ideone.com и ошибка действительно появилась.
Примечание: похоже, что при запуске кода и печати содержимого полей после присвоения значения cw
, затем cmd
разрешается до первого (9-битного) члена.
Задача ещё не решена.
Других решений пока нет …