История изменений
Исправление alexru, (текущая версия) :
а отчего-бы не наоборот ?
Потому, что применяется одинаковая логика разбора. Сначала вся программа/блок просматривается и все декларации (функций, типов, переменных) «запоминаются». Потом вторым проходом генерируется код, который уже может ссылаться на еще не объявленные названия, так как они уже известны.
Почему бы такому коду:
struct A
{
B member_of_type_b;
};
struct B
{
int member;
};
не посчитать, что B - это int, например, ведь настоящий B объявлен позже по коду.
Исправление alexru, :
а отчего-бы не наоборот ?
Потому, что применяется одинаковая логика разбора. Сначала вся программа/блок просматривается и все декларации (функций, типов, переменных) «запоминаются». Потом вторым проходом генерируется код, который уже может ссылаться на еще не объявленные названия, так как они уже известны.
Почему бы такому коду:
struct A
{
B member_of_type_b;
};
struct B
{
int member;
};
не посчитать, что B - это int, например.
Исходная версия alexru, :
а отчего-бы не наоборот ?
Потому, что применяется одинаковая логика разбора. Сначала вся программа/блок просматривается и все декларации (функций, типов, переменных) «запоминаются». Потом вторым проходом генерируется код, который уже может ссылаться на еще не объявленные названия, так как они уже известны.