Потому что область действия x локальна для функции stupid (). как только вы вызываете функцию, и она заканчивается, вы выходите за ее пределы, и вы печатаете значение «x», которое определено вне функции stupid () - и, x, которое определено внутри функции stupid () больше не существует в стеке (как только эта функция заканчивается)
изменить после вашего комментария:
на external x ссылаются, когда вы печатаете его, так же, как вы это делали.
На внутренний x можно ссылаться, только когда вы внутри функции stupid (). так что вы можете печатать внутри этой функции, чтобы увидеть, какое значение содержит х внутри нее.
О "глобальном"
- работает и отвечает на вопрос, видимо
- не очень хорошая идея использовать все это часто
- вызывает проблемы с читаемостью и масштабируемостью (и, возможно, больше)
- В зависимости от вашего проекта вы можете пересмотреть использование глобальной переменной, определенной внутри локальной функции.