advertencia cuando se utiliza campo de bits con caracteres sin firmar

Este es mi campo de bits

struct { unsigned char v64 : 1; unsigned char leg : 7; } valid; 

Entonces me sale la advertencia:

 main.c:17:3: warning: type of bit-field 'v64' is a GCC extension [-pedantic] main.c:18:3: warning: type of bit-field 'leg' is a GCC extension [-pedantic] 

Si cambio a int no hay advertencia. Pero quiero un campo de bits de un byte (carácter sin signo).

¿Cómo?

Elimine la opción gcc -pedantic si no desea obtener la advertencia.

En C99, gcc emite una advertencia con -pedantic pero se le permite tener un tipo definido de implementación para el campo de bits (como el unsigned char ).

(C99, 6.7.2.1p4) “Un campo de bits debe tener un tipo que sea una versión calificada o no calificada de _Bool, int firmado, unsigned int, o algún otro tipo definido por la implementación”.

En C90, solo se permiten int , unsigned int y signed int .

(C90, 6.5.2.1) “Un campo de bits debe tener un tipo que sea una versión calificada o no calificada de uno de int, unsigned int, o sign firmado”

En realidad, tanto en C90 como en C99, la advertencia no es requerida por C (es un comportamiento indefinido en C90 solamente, pero C no requiere una advertencia por comportamiento indefinido). La advertencia es agregada por gcc con -pedantic solo para información.