lunes, 1 de febrero de 2010

Campos

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