2010-11-23 25 views
6

En este enlace me encontré con http://lxr.linux.no/#linux+v2.6.36/include/linux/pci.h#L299 declaración número entero unsigned int is_added:1; he hecho programas en C y declaró enteros en ellos, pero en el anterior Veo uso de : Lo tipo de sintaxis es eso?cómo declarar un entero sin signo en un programa de C

+3

Es probable que suceda algo de magia preprocesadora. – OmnipotentEntity

+17

¿Por qué demonios el comentario anterior tiene 2 votos hacia arriba? –

+1

@OmnipotentEntity: No. – jamesdlin

Respuesta

9

creo que haya llegado a través de un bit-field :)

+0

ja, ja :) ok leyendo el resto de las respuestas Ahora puedo entender lo que está por encima. –

3

Es parte de un struct, lo que significa que indica que el campo sólo se debe utilizar un cierto número de bits en lugar de un byte completo o más.

1

Esto indica que solo se usará un bit de esto.

0

En struct s, uno puede tener variables enteras que ocupen cualquier cantidad de bits entre 1 y 31. is_added es una variable de un bit. Las variables de un bit también se conocen como banderas.

+1

de donde obtienes el número 31? Esto es engañoso. Puede usar tantos como el ancho de 'int', que es al menos 32. Debe ser un poco cauteloso con respecto al bit de signo, pero como aquí el campo se declara' unsigned int' puede contener al menos 32 bit sin dolor . –

+1

@Jens: el ancho de un int puede ser tan pequeño como 16 bits en C99. – JeremyP

+1

@JeremyP: oops, a la derecha. Entonces el 31 es aún más falso. –

3

Esta es una declaración de campo de bit en una matriz. El número de publicación ":" denota el número de bits para asignar a este campo particular de la estructura.

Aunque debe tener cuidado con los campos de bits ya que su representación binaria no es portátil. Es decir, está pasando blobs binarios entre interfaces compiladas con diferentes compiladores, puede que no funcione.

+0

Ok Ahora entiendo que había olvidado completamente tal cosa. –

Cuestiones relacionadas