У меня есть код, который использует битовые поля, объявленные следующим образомБит-поля типа, отличного от int?
typedef struct my{
const char *name;
uint8_t is_alpha : 1;
uint8_t is_hwaccel : 1;
uint8_t x_chroma_shift;
uint8_t y_chroma_shift;
} mystr;
uint8_t
является typedef'ed к unsigned char
.
Построение кода в MS-VS 2008, используя этот бит поля выдает предупреждение, как показано ниже:
imgconvert.c(60) : warning C4214: nonstandard extension used : bit-field types other than int.
- Есть ли какие-либо проблемы/потенциальные проблемы при использовании битовых полей типа, кроме междунар? Почему предупреждение?
- За исключением битовых имен типа типа int, разрешенных спецификацией языка C99 C?
Предупреждение довольно понятно: __nonstandard extension used__; ваш код может иметь проблемы с переносимостью. –
@Mehrad: Использование типа int полезно из аспектов переносимости только в том случае, если все цели/компиляторы имеют одинаковые значения. – goldenmean
Вы пишете о битовых полях здесь, их размер указан в коде. – AProgrammer