eonil
Posible duplicado:
¿Qué significan los dos puntos en una declaración de estructura, como :1, :7, :16 o :32?
Esta es una muestra de código C de una página de referencia.
signed int _exponent:8;
¿Cuál es el significado de los dos puntos antes de ‘8’ y ‘8’ en sí?
EboMike
Es un campo de bits. Sólo es válido en un struct
definición, y significa que el sistema solo usará 8 bits para su número entero.
R.. GitHub DEJAR DE AYUDAR A ICE
Es un campo de bits, una característica oscura y equivocada de las estructuras. Eso debería ser suficiente para que busque la información que necesita saber para manejar los campos de bits en el código de otras personas. En cuanto a su propio código, nunca use campos de bits.
Editar: Según lo solicitado por Zack, los campos de bits tienen desventajas significativas en comparación con realizar su propia aritmética de bits, y ninguna ventaja. Éstos son algunos de ellos:
- Solo puede copiar, comparar, serializar o deserializar un elemento de campo de bits a la vez. Haciendo su propia aritmética de bits, puede operar con palabras completas a la vez.
- Nunca puede tener un puntero a elementos de campo de bits. Con su propia aritmética de bits, puede tener un puntero a la palabra más grande y un índice de bits dentro de la palabra como un “puntero”.
- La lectura/escritura directa de estructuras C en el disco o la red es semiportátil sin campos de bits, siempre que utilice tipos de tamaño fijo y conozca el endian. Sin embargo, agregue campos de bits y el orden de los elementos dentro del tipo más grande, así como el espacio total utilizado y la alineación, se vuelven altamente dependientes de la implementación, incluso dentro de una arquitectura de CPU determinada.
- La especificación C tiene reglas muy extrañas que permiten que la firma de los elementos de campo de bits sea diferente de lo que se esperaría, y muy pocas personas las conocen.
Para las banderas de un solo bit, usar su propia aritmética de bits en lugar de campos de bits es una completa obviedad. Para valores más grandes, debe empacar, si es demasiado doloroso escribir toda la aritmética de bits por todos lados, escriba algunas macros simples.
-
Esa es una declaración terriblemente fuerte, allí. ¿Cuidado para elaborar?
– zwol
21 de octubre de 2010 a las 3:00
-
+1 para “nunca usar campos de bits”.
– Travis Gockel
21 de octubre de 2010 a las 3:00
-
No estoy de acuerdo :). No estoy de acuerdo con la parte “oscura y equivocada de las estructuras” y “nunca use campos de bits”. Los campos de bits son muy necesarios para el uso económico del espacio y la interfaz con el hardware.
– Arun
21 de octubre de 2010 a las 3:04
-
¿”Oscuro y equivocado”? ¡Eso es fuerte! Los campos de bits tienen su lugar, al igual que los gotos y los múltiples puntos de retorno. Por ejemplo, pueden tener un valor incalculable en los sistemas integrados para evitar la manipulación manual de bits. No regaño a mi suegro constructor por usar herramientas eléctricas porque asumo que sabe cómo manejarlas. eso es lo mismo para todos herramientas, incluidos los lenguajes de programación.
– pax diablo
21 de octubre de 2010 a las 3:07
-
@paxdiablo: No considero que los campos de bits sean una herramienta poderosa que deba evitarse porque son peligrosos. Los considero paralizados por la subespecificación que hace que su uso sea menos efectivo que la simple alternativa de hacer aritmética de bits.
– R.. GitHub DEJA DE AYUDAR A ICE
21 de octubre de 2010 a las 3:24
Es un campo de bits especificación.
Significa _exponent
toma solo 8
pedacitos de la signed int
que normalmente toma más de 8
pedacitos Normalmente, los campos de bits se utilizan con tipos sin firmar.
IIRC, el compilador advertiría si algo que no encaja en 8 bits se escribe en _exponent
.
Cuando esa declaración está dentro de una estructura, significa campos de bits.
¿Esto es parte de una definición de estructura?
– Mark Elliot
21 de octubre de 2010 a las 2:53