sizeof() no funciona cuando se aplica a campos de bits:¿Hay un bit equivalente a sizeof() en C?
# cat p.c
#include<stdio.h>
int main(int argc, char **argv)
{
struct { unsigned int bitfield : 3; } s;
fprintf(stdout, "size=%d\n", sizeof(s.bitfield));
}
# gcc p.c -o p
p.c: In function ‘main’:
p.c:5: error: ‘sizeof’ applied to a bit-field
... obviamente, ya que no puede devolver un tamaño de punto flotante parcial o algo así. Sin embargo, trajo una pregunta interesante. ¿Hay allí un equivalente, en C, que le dirá el número de bits en una variable/tipo? Idealmente, también funcionaría para tipos regulares, como char y int, además de bitfields.
Actualización:
Si no hay un lenguaje equivalente de sizeof() para los campos de bits, lo que es la forma más eficiente de calcularlo - en tiempo de ejecución! Imagina que tienes bucles que dependen de esto, y no quieres que se rompan si cambias el tamaño del campo de bits, y no haces trampas justas y haces que el tamaño del campo de bits y la longitud del bucle sean macro. ;-)
+1 genial, no sabía de CHAR_BIT. ¿y si necesitabas calcular el tamaño del campo de bit en tiempo de ejecución? – eruciform
Eso simplemente no es posible (una de las razones por las cuales las personas evitan los campos de bits). Un compilador podría implementar esto como una extensión para esto, pero nunca he oído hablar de uno. – schot
@schot: byte! = Char. En C, char es siempre de 8 bits, por lo que 'CHAR_BIT' siempre es 8. Independientemente de CPU/etc. Hace mucho tiempo podría haber sido diferente (la constante existe por razones históricas) pero ya no. Verifique C99, 'limits.h'. – Dummy00001