У меня есть следующий код:
typedef struct A_{
void* values;
}A;
typedef struct C_{
int array_C[3][3];
}C;
typedef struct B_{
C c;
}B;
int main(void)
{
B* b;
A array_A[2] = {
{
&(b->c.array_C) \\ line 23
},
{
&(b->c.array_C) \\ line 27
}
};
return 0;
}
моя ошибка находится в строках 23 и 27, в которых говорится, что &(b->c.array_C) должно быть константным. что я делаю неправильно? адрес массива не константа?
Причина, по которой я это делаю, заключается в том, что мне нужно улучшить цикломатическую сложность функции с помощью 340 операторов if, когда каждый оператор if имеет следующую форму:
if( exspretion )
{
foo( address_of_array);
return false;
}
если я изменю 340 операторов if на один цикл while, который выполняется 340 раз и получает из приведенного выше массива аргумент для функции foo, цикломатическая сложность будет лучше?
&(b->c.array_C)
требует, чтобы значениеb
было известно во время компиляции, а это не так. - person Drew McGowen   schedule 29.07.2014b
— неинициализированный указатель. Сначала вы должны инициализировать его действительным адресом. - person Don't You Worry Child   schedule 29.07.2014b
было известно во время компиляции? - person Utkan Gezer   schedule 29.07.2014{}
, в C89/90 должны были состоять из констант времени компиляции (даже при использовании с локальными объектами). Это требование было отменено в C99. Но большинство компиляторов C89/90 уже проигнорировали это требование, что заставляет меня задаться вопросом, какой компилятор использует OP. - person AnT   schedule 05.12.2016