В следующем коде, почему переменной i
не присвоено значение 1
?
#include <stdio.h>
int main(void)
{
int val = 0;
switch (val) {
int i = 1; //i is defined here
case 0:
printf("value: %d\n", i);
break;
default:
printf("value: %d\n", i);
break;
}
return 0;
}
При компиляции я получаю предупреждение о том, что i
не инициализируется, несмотря на int i = 1;
, который явно инициализирует его
$ gcc -Wall test.c
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
printf("value %d\n", i);
^
Если val = 0
, то выход будет 0
.
Если val = 1
или что-то еще, то вывод также равен 0.
Пожалуйста, объясните мне, почему переменная i
объявлена, но не определена внутри коммутатора. Объект с идентификатором i
существует с автоматической продолжительностью хранения (внутри блока), но никогда не инициализируется. Почему?