Im, развивающийся с помощью компилятора Microchips XC8 C 1.12.sizeof (struct foo) не постоянный?
У меня есть следующий фрагмент кода, но компилятор ему не нравится.
struct _foo {
int a;
};
enum BAR {
CONST1 = sizeof(struct _foo)
};
Ошибки я получаю: main.c:6: error: integer expression required
Почему генерировать эту ошибку? Разве размер какой-либо структуры в C не является константой? Если я использую sizeof (int), все работает нормально.
Примечание: компилятор XC8 v1.12 следует стандарту C90, а не современному стандарту C99.
PS Это компилируется:
char abc[sizeof(struct _foo)];
И это выражение также должно быть постоянным во время компиляции ведет меня думать, что это на самом деле не то, что происходит не так в объявлении перечисления.
Это похоже на ограничение в компиляторе. – ouah
@ Gilles: Нет, массив переменной длины не может быть членом структуры. (Есть гибкие элементы массива, но они не вносят вклад в размер, о котором сообщает 'sizeof'.) –
Использует ли' const int sizeof_foo = sizeof (struct _foo); enum BAR {CONST1 = sizeof_foo}; 'работа? Я бы не ожидал, что это будет иметь значение, но это того стоит. –