я вижу, что многие говорят, что sizeof нельзя использовать в директиве препроцессора,
однако это не может быть целой историей, потому что я регулярно использую следующий макрос:
#define STATICARRAYSIZE(a) (sizeof(a)/sizeof(*a))
например:
#include <stdio.h>
#define STATICARRAYSIZE(a) (sizeof(a)/sizeof(*a))
int main(int argc, char*argv[])
{
unsigned char chars[] = "hello world!";
double dubls[] = {1, 2, 3, 4, 5};
printf("chars num bytes: %ld, num elements: %ld.\n" , sizeof(chars), STATICARRAYSIZE(chars));
printf("dubls num bytes: %ld, num elements: %ld.\n" , sizeof(dubls), STATICARRAYSIZE(dubls));
}
выходы:
orion$ ./a.out
chars num bytes: 13, num elements: 13.
dubls num bytes: 40, num elements: 5.
однако
я тоже не могу заставить sizeof () скомпилироваться в операторе #if в gcc 4.2.1.
например, это не компилируется:
#if (sizeof(int) == 2)
#error uh oh
#endif
Любое понимание будет оценено.