Если компилятор хорош, это дополнение происходит в регистрах и никогда не сохраняется в памяти, по крайней мере, не так, как вы думаете. На самом деле хороший компилятор увидит, что ваша программа ничего не делает, манипулируя значениями внутри функции, но никогда не отправляя эти значения где-либо за пределами функции, это может привести к отсутствию кода.
Если бы вы:
с = а + б;
Е ( "% и \ п", с);
Тогда хороший компилятор также никогда не сохранит это значение C в памяти, он останется в регистрах, хотя это также зависит от процессора. Если, например, компиляторы для этого процессора используют стек для передачи переменных в функции, тогда значение для c будет вычисляться с использованием регистров (хороший компилятор увидит, что C всегда равно 11, и просто назначит его), а значение будет помещено в стек при отправке в функцию printf. Естественно, функции printf может потребоваться временное хранение в памяти из-за ее сложности (не может вместить все, что нужно сделать в регистрах).
Куда я направляюсь, так это того, что на ваш вопрос нет ответа. Это сильно зависит от процессора, компилятора и т. Д. Нет общего ответа. Я должен задаться вопросом, в чем корень вопроса, если вы надеялись проверить с помощью отладчика, тогда этот вопрос не стоит задавать.
Итог, разберите вашу программу и посмотрите на нее: для этой компиляции в тот день с этими настройками вы сможете увидеть, где компилятор поместил промежуточные значения. Даже если компилятор назначит место в памяти для переменной, это не означает, что программа будет хранить переменную в этом месте. Это зависит от оптимизации.