Sizeof() не работает при применении к битовым полям:
# 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
... очевидно, поскольку он не может вернуть частичный размер с плавающей запятой или что-то еще. Однако это вызвало интересный вопрос. Есть ли эквивалент в C, который укажет вам количество бит в переменной/типе? В идеале он также будет работать и для обычных типов, таких как char и int, в дополнение к битовым полям.
Update:
Если для битовых полей нет языкового эквивалента sizeof(), что является наиболее эффективным способом его вычисления - во время выполнения! Представьте, что у вас есть петли, которые зависят от этого, и вы не хотите, чтобы они ломались, если вы изменили размер битового поля - и не справедливо обманывали и делали размер битового поля и длину цикла макросом.; -)