Ошибка кода элемента инициализатора - PullRequest
2 голосов
/ 28 марта 2011

Когда я запускаю этот кусок кода:

void main(){
   int a = 5;
   static int i = a+5;
   printf("%d", i);
}

Я получаю ошибку: элемент инициализатора не является константой

Что это значит?

Ответы [ 5 ]

5 голосов
/ 28 марта 2011

Статические переменные в области действия идут в сегмент данных.Сегмент данных инициализируется во время компиляции.Это означает, что начальное значение должно быть известно во время компиляции.В вашем случае начальное значение (значение a) исходит из переменной в стеке, которая доступна только во время выполнения.

1 голос
/ 28 марта 2011

В C инициализатор должен быть некоторой константой.однако вы можете сделать что-то вроде этого ...

int a = 5;
static int i;
i = a + 5;
printf("%d", i);

это не приведет к ошибке ...

0 голосов
/ 28 марта 2011

, поскольку вы инициализируете переменную i не постоянным числом (например, int a = 5;), а выражением (a+5), которое недопустимо.

0 голосов
/ 28 марта 2011

Ключевое слово static означает, что будет ровно один экземпляр переменной i, и этот экземпляр будет существовать в течение всей жизни программы. Это полезно, например, если вы хотите сохранить значения между вызовами функций.

Поскольку переменная инициализируется при запуске приложения, значение должно быть постоянным.

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

0 голосов
/ 28 марта 2011

Нельзя присвоить статическую переменную.

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