Безопасно ли использовать перечисление в битовом поле?

Скажем, у меня есть следующая структура:

typedef struct my_struct{
    unsigned long       a;
    unsigned long       b;
    char*               c;
    unsigned int        d1  :1;
    unsigned int        d2  :4;
    unsigned int        d3  :4;
    unsigned int        d4  :23;
} my_type, *p_type;

Поле d3в настоящее время определяется #defines, которые простираются от 0x00до 0x0D.

На самом деле d3— это перечисление. Так что заманчиво пойти дальше и заменить

    unsigned int        d3  :4;

по

    my_enum             d3  :4;

Это безопасно/разрешено?

Код должен компилироваться с различными

  • компиляторы (GCC, Visual Studio, встроенные компоненты)
  • платформы (Win32, Linux, встраиваемые устройства)
  • конфигурации (компилируются как C, компилируются как C++)

Очевидно, я мог бы оставить определение d3как есть и использовать перечисление в своем коде, присвоить его d3и так далее, но это не будет работать с C++.

26
задан eckes 16 August 2012 в 11:37
поделиться