Обычная практика - объявлять переменные стека (переменные, расположенные в стеке, а не динамически или статически) в точке входа функции, а не смешанные с инструкциями внутри функции.
Смотрите пример 1.a и 1.b.
Это помогает улучшить читабельность и даже требовало использования более старого языка.
В современных C / C ++ это больше не требуется (но все же хорошая практика).
Мой вопрос, хотя:
Как компилятор решает эту проблему, если переменные стека находятся внутри функции, а не в точке входа.
Посмотрите примеры 2.a и 2.b, как я могу представить, что он решает это.
Что на самом деле происходит?
1.a) Пример (Общая практика / Лучшая практика)
void main()
{
int a = 3; // best practice
bool c = false; // best practice
a += 16;
if(a == 5)
{
c=false;
}
}
... а не ...
1.b) Пример (необычный)
void main()
{
int a = 3;
a += 16;
bool c = false; // variable after some instructions executed..
if(a == 5)
{
c=false;
}
}
2.a) Возможное решение компилятора (A)
void main()
{
int a = 3;
a += 16;
bool c = false; // COMPILER CUTS THIS LINE AND MOVES IT UP UNDER "int a = 3;"
if(a == 5)
{
c=false;
}
}
2.B) Возможное решение компилятора (B)
void main()
{
int a = 3;
a += 16;
{ // COMPILER ADDS SUBSECTION IN ORDER TO INTRODUCE NEW VARIABLES ON STACK
bool c = false;
if(a == 5)
{
c=false;
}
}
}