Назначение, которое является частью b++
в вашей функции b()
, не обязательно должно выполняться компилятором, поскольку b
впоследствии не читается.Но что более важно здесь, если у вас нет инициализатора:
The initial value of the object is indeterminate.
вот и все.(Не UB, как говорят другие.) Компилятор может реализовать это любым удобным для него способом.
NB: Слово "стек" нигде не встречается в Cстандарт.Принимая во внимание, что это удобная концепция для реализации auto
переменных в C, компилятор не обязан использовать эту концепцию для заданной переменной, и, в частности, вообще нет обязанности хранить переменную в памяти.Он может просто хранить все переменные в регистрах, если платформа позволяет это.Поэтому, если вы посмотрите на ассемблер, созданный для a()
, вы, скорее всего, просто увидите ничего , просто пустой возврат.