C++: Анонимные структуры в union?

В свете последних статей об изменении стандартов C++11 хотел спросить следующий момент. Я не великий спец по C++, пока только изучаю. Столкнулся со следующей задачей, устройство передает информацию о своем состоянии одним байтом, где каждый конкретный бит соответствует определенному параметру. В C/C++ есть очень удобные штуки — union и битовые поля.


По идее для такой задачи он должен выглядить таким образом
union Data
{
	struct
	{
		unsigned int param1 :1;
		unsigned int param2 :1;
		unsigned int param3 :1;
		unsigned int param4 :1;
		unsigned int param5 :1;
		unsigned int param6 :1;
		unsigned int param7 :1;
		unsigned int param8 :1;
	} params;
	unsigned char Byte;
};
Data info;



Тут получается можно записать байт в
info.Byte = 0x21;

а потом работать с параметрами как
info.params.param3 = 1;


Но для большей читабельности кода можно сделать еще и так.
union Data
{
	struct
	{
		unsigned int param1 :1;
		unsigned int param2 :1;
		unsigned int param3 :1;
		unsigned int param4 :1;
		unsigned int param5 :1;
		unsigned int param6 :1;
		unsigned int param7 :1;
		unsigned int param8 :1;
	};
	unsigned char Byte;
};
Data info;


Тогда байт записать можно все также
info.Byte = 0x21;

а вот работать с битами можно уже более понятным и простым способом
info.param3 = 1;


Второй вариант мне чисто эстетически нравится больше, но терзают смутные сомнения относительно его соответствии стандартам. Возможно ли использование анонимных структур вот в таких объединениях?

Буржуи на форумах вроде как говорят, что это не есть гут, но при этом тот-же GCC компилирует этот код без ворнингов и все работает как и положено.


Подскажите возможно ли такое использование или это исключительно фича GCC и соответственно компиляторо-зависимый код получается?
  • Вопрос задан
  • 7756 просмотров
Пригласить эксперта
Ответы на вопрос 1
gouranga
@gouranga
info.Byte = 0x21;
info.param3 = 1;

Если вы хотите так писать, то какой смысл был выделять под это отдельную структуру?

p.s. А почему у вас Byte с большой буквы, а paramX с маленькой? Ата-та вам за стилистику. :-)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы