C статические переменные и инициализация - PullRequest
3 голосов
/ 11 апреля 2010

Если у меня есть глобальная статическая переменная x, как в этом коде

 #include <stdio.h>
 #include <stdio.h>

 static int x;

 int main(void)
 {

 DO SOMETHING WITH x HERE

 x++;

 }

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

static int x = 0;  

перед вводом "main"?

В моем первом случае, когда я не назначил значение для x, знает ли компилятор неявно, что x должен быть установлен в ноль, поскольку это статическая переменная? Я слышал, что мы можем сделать это с помощью статических переменных.

Большое спасибо ...

Ответы [ 4 ]

7 голосов
/ 11 апреля 2010

Статические переменные с явной инициализацией всегда инициализируются нулем (или нулевым указателем, в зависимости от типа). Стандарт C & gt; 6.7.8 / 10 содержит описание этого. Но если явно установить его в 0, другим не придется задумываться над тем же вопросом:).

4 голосов
/ 11 апреля 2010

Есть хороший ответ здесь :

Просто короткий отрывок:

Прежде всего в ISO C (ANSI C) все статические и глобальные переменные должны быть инициализированы до запуска программы. Если программист не сделал этого явно, то компилятор должен установить их в ноль. Если компилятор этого не делает, он не следует ISO C. Точно, как переменные инициализируются, однако не определено стандартом.

3 голосов
/ 11 апреля 2010

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

0 голосов
/ 11 апреля 2010

Статические переменные всегда неявно инициализируются в ноль, поэтому не будет никакой разницы в явной инициализации x в ноль.

...