При компиляции под кодом, использующим GCC 4.8.3, появляется сообщение об ошибке «arrTest.c: 12: 4: ошибка: объект с переменным размером не может быть инициализирован». Но тот же код компилируется отлично при компиляции с GCC 4.1. Может ли кто-нибудь помочь мне исправить это?ошибка компиляции при смещении элемента структуры, используемого как длина массива
#define OFFSET(structure, member) /* byte offset of member in structure*/\
((const int) &(((structure *) 0) -> member))
typedef struct test{
int a;
char b;
int c;
}test;
void main()
{
int arr[OFFSET(test, b)] = {0};
printf("%d %d\n", arr[0], OFFSET(test, b));
return;
}
Хотя удаление инициализации массива устранит проблему. Но в моем коде есть много таких примеров. Поэтому я не хочу идти куда угодно и изменять. Я хотел знать, существует ли какой-либо путь в GCC 4.8, чтобы исправить это либо с помощью некоторых флагов компиляции, либо с изменением определения MACRO, поскольку тот же код скомпилирован с GCC 4.1.
изменить 'int arr [OFFSET (test, b)] = {0};' to 'int arr [OFFSET (test, b)];' –
Спасибо, Grijesh, на самом деле в моем коде много таких примеров , Поэтому я не хочу идти куда угодно и изменять, как вы предложили. Я хотел знать, существует ли какой-либо путь в GCC 4.8, чтобы исправить это либо с помощью некоторых флагов компиляции, либо с изменением определения MACRO, поскольку тот же код скомпилирован с GCC 4.1. –
Я считаю, что должно быть что-то. Вы также должны добавить эту информацию в комментарии к вопросу внизу. –