Исправление no-such-file, (текущая версия) :
Причём тут контекст и стекфреймы
При том что блок это новый фрейм. Переменные из блока существуют только внутри блока. Внезапно. И чтобы знать размер этого фрейма компилятор должен до начала кода блока знать все переменные и вставить машкод для резервирования фрейма. Поэтому либо они должны быть описаны в начале блока, либо надо делать два прохода: один чтобы найти все декларации, а второй чтобы собственно скомпилять код.
Это гарантированно работает всегда
Это вообще не работает
#include <stdio.h>
int main () {
int x = 1;
printf("%d\n", x);
{ int y = 2; }
printf("%d\n", y);
}
test.c: In function ‘main’:
test.c:10:18: error: ‘y’ undeclared (first use in this function)
10 | printf("%d\n", y);
| ^
Исправление no-such-file, :
Причём тут контекст и стекфреймы
При том что блок это новый фрейм. Переменные из блока существуют только внутри блока. Внезапно. И чтобы знать размер этого фрейма компилятор должен до начала кода блока знать все переменные и вставить машкод для резервирования фрейма. Поэтому либо они должны быть описаны в начале блока, либо надо делать два прохода: один чтобы найти все декларации, а второй чтобы собственно скомпилять код.
Это гарантированно работает всегда
Это вообще не работает
#include <stdio.h>
int main () {
int x = 1;
{
int y = 2;
}
printf("%d\n", y);
}
gcc test.c
test.c: In function ‘main’:
test.c:9:18: error: ‘y’ undeclared (first use in this function)
9 | printf("%d\n", y);
| ^
test.c:9:18: note: each undeclared identifier is reported only once for each function it appears in
Исходная версия no-such-file, :
Причём тут контекст и стекфреймы
При том что блок это новый фрейм. Переменные из блока существуют только внутри блока. Внезапно. И чтобы знать размер этого фрейма компилятор должен до начала кода блока знать все переменные и вставить машкод для резервирования фрейма. Поэтому либо они должны быть описаны в начале блока, либо надо делать два прохода: один чтобы найти все декларации, а второй чтобы собственно скомпилять код.