В следующем коде, почему переменной 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 существует с автоматической продолжительностью хранения (внутри блока), но никогда не инициализируется. Почему?