Я читал об области видимости переменных в C++ и столкнулся с интересной блочной структурой:
int main(int argc, char **argv) {
int local;
{ // New level of scope
int more_local;
}
return 0;
}
Я понимаю, что переменные извлекаются из стека в конце каждого блока, обозначенного закрывающей фигурной скобкой }
.
Я также читал, что вызовы функций также помещают свои переменные в стек и завершаются в конце вызова, обозначенного закрывающей фигурной скобкой }
:
void foo() {
int more_local;
}
int main(int argc, char **argv) {
int local;
foo();
return 0;
}
Как по-разному обрабатывается стек в обеих ситуациях и каковы преимущества и недостатки обоих?