Dentro de la declaraciòn de una estructura puede aparecer un miembro seguido por un caràcter de dos puntos ":" y una expresiòn constante, denominàndose entonces campo (field).
El tipo del miembro debe ser alguno de los tipos enteros (char, int, short, long o unsigned); la expresión constante especifica cuántos bits van a utilizarse para ese miembro.
Los campos de bit son una alternativa a las operaciones explícitas de desplazamiento y máscaras de bits, Consideremos el programa:
#define KEYWORD 01
#define EXTERNAL 02
# define STATIC 04
int flags;
...
flags |= EXTERNAL | STATIC;
...
if (flags & KEYWORD) {
...
Esto mismo se podría también haber escrito como:
struct {
int is_keyword:1;
int is_extern:1;
int is_static:1;
} flags;
...
flags.is_extern = flags.is_static =1;
...
if (flags.is_keyword){
...
Desafortunadamente, el empleo de campos de bit en C tiene algunos inconvenientes:
• en las versiones antiguas de compiladores de C, todos los campos tienen que ser cantidades sin signo;
• no pueden emplearse datos binarios empaquetadas de una máquina a otra, pues el empaquetado es dependiente dé la máquina al no especificarse si la asignación de bits se hace de izquierda a derecha, o de derecha a izquierda;
• los campos de bit no son exactamente variables, en el sentido de que no pueden definirse punteros a campos de bit, ni arrays de campos, aunque, por supuesto, sigue siendo válido definir punteros a estructuras que contengan campos de bit.
No hay comentarios:
Publicar un comentario