почему указатель статической структуры не может быть инициализирован по адресу переменной - PullRequest
0 голосов
/ 05 мая 2018

Я получаю ошибку при инициализации структуры в форме ниже

static struct A* a = &apple->queue[queue_number];
static struct B* b = &banana->queue_a[queue_number];

Я получаю ошибку

Error:  #28: expression must have a constant value

Я хочу сохранить указатель a и b как статический, чтобы его область действия оставалась в том же файле. Пожалуйста, помогите здесь

1 Ответ

0 голосов
/ 05 мая 2018

Это потому, что a имеет тип static и его следует инициализировать с constants или значениями переменной (в вашем случае это &apple->queue[queue_number]), известными во время компиляции не во время выполнения , Из стандарта С

Все выражения в инициализаторе для объекта, который имеет статический или продолжительность хранения потока должна быть константным выражением или строкой литералы.

Я хочу сохранить указатель a и b как статический? Один из способов сделать это - сначала инициализировать a с помощью NULL и проверить его.

static struct A *a = NULL;
if(a == NULL) { /* point to remember when a become NULL it initialize again a */
        a = &apple->queue[queue_number]; /*initialize expected value here */ 
}

Может быть, вы захотите прочитать это Ошибка «элемент инициализатора не является константой» при попытке инициализировать переменную с помощью const

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...