Bit-fields of type other than int?
bit-fields, c, visual-c++
Solution
1] Is there any problems/potential issues in using bit fields of type other than int? Why the warning?
Since bit-fields are low-level, there may be issues with portability if you are using non-standard types. Hence the warning -- note it is still a warning and not an error.
2] Are other than int type bit-fileds they allowed by C99 C language specification?
From the draft of C99:
6.7.2.1 Structure and union specifiers
4 A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed int, unsigned int, or some other implementation-defined type.
Problem
I have a code which uses bit-fields declared as follows ``` 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` is typedef'ed to `unsigned char`. Building the code in MS-VS 2008 using this bit fields gives a warning as below: ``` imgconvert.c(60) : warning C4214: nonstandard extension used : bit-field types other than int. ``` - Is there any problems/potential issues in using bit fields of type other than int? Why the warning? - Are other than int type bit-fileds they allowed by C99 C language specification?