LINUX.ORG.RU

История изменений

Исправление 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, :

а отчего-бы не наоборот ?

Потому, что применяется одинаковая логика разбора. Сначала вся программа/блок просматривается и все декларации (функций, типов, переменных) «запоминаются». Потом вторым проходом генерируется код, который уже может ссылаться на еще не объявленные названия, так как они уже известны.