Пропуск инициализации переменной с ограниченной областью видимости с goto не дает желаемого результата - PullRequest
7 голосов
/ 06 августа 2020
#include <stdio.h>

int main()
{
    int a = 10;
    goto inside;
    {
        int a = 20;
        {
            inside:
            printf("%d",a);
        }
    }
}

Почему вывод выводится как 0, а не как 10? Даже если ищет ближайший прицел ie. int a = 20, что не совсем понятно. В памяти всего int a = 10;, так почему здесь 0?

1 Ответ

7 голосов
/ 06 августа 2020

В момент вызова printf имя a относится ко второй переменной с этим именем, той, которая инициализирована как 20. Внешний a, инициализированный как 10, скрыт. Нет причин для printf печатать 10.

Оператор goto пропускает инициализацию внутреннего a, поэтому он никогда не инициализируется 20. Под него выделено место, но его значение - произвольная фигня. Напечатанный 0 - это содержимое внутреннего a. Это могло быть что угодно.

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