Member 14702474 Ответов: 2

Почему мы не должны инициализировать статическую переменную в объявлении?


привет всем, мне интересно, почему мы должны объявлять статические переменные, а затем передавать им число. например, почему мы не можем написать : static int x=y ; ?

Что я уже пробовал:

int y=5 ;
статический int x=y ;
error: initializer element is not constant

2 Ответов

Рейтинг:
12

OriginalGriff

Карстен прав, но не совсем точно.

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

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


Рейтинг:
1

KarstenK

Вы неправильно поняли сообщение об ошибке. Инициализация статической переменной-это хороший стиль, но ТВОЙ код имеет тот недостаток, что y не является постоянной величиной.

Таким образом, y может быть изменен вашим кодом до того, как x будет инициализирован. Таким образом, значение может отличаться в зависимости от потока программы.

static int x = 5;