Предварительное объявление

Предварительное объявление

Предварительное объявление является таким типом объявления, при котором компилятор имеет возможность разрешить ссылки из различных частей программы. Предварительное объявление позволяет программисту ссылаться на объекты, о которых компилятор ещё не знает, но которые будут определены в процессе компиляции позже.

В программировании предварительное объявление - это объявление идентификатора (типа, переменной или функции), для которого программист ещё не дал полного определения. Объявление идентификатора требуется компилятору для того, чтобы знать тип (размер) идентификатора, но не его значения (в случае переменных).

void printThisInteger(int);

В C/C++, приведённая строка означает предварительное объявление функции и является её прототипом. После обработки этого объявления, компилятор даёт возможность программисту ссылаться на сущность printThisInteger в остальной части программы. Определение функции должно быть описано где-то ещё (в том же или другом файле; задача линкера - сопоставить ссылки на данную функцию в одном или нескольких объектных файлах с её единственным определением в другом):

void printThisInteger(int x) {
   printf("%d\n", x);
}

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

int foo; //foo могло быть определено где-то в этом файле
extern int bar; //bar должно быть определено в другом файле

В Паскале и других виртовских языках программирования тот факт, что все сущности должны быть объявлены до первого использования - общее правило. В языке Си применяется то же правило, делая исключения для необъявленных функций и неполных типов. Так, в Си есть возможность реализации пары взаимно-рекурсивных функций:

int first(int x) {
   if (x == 0)
      return 1;
 
   return second(x-1); //опережающее обращение к second
}
 
int second(int x) {
   if (x == 0)
      return 0;
 
   return first(x-1);
}

В Паскале аналогичная реализация требует предварительного объявления фукнции second до первого её использования. Без предварительного объявления компилятор выдаст сообщение об ошибке, означающее, что идентификатор second использован, не будучи объявленым.

Опережающая ссылка (обращение)

Термин "опережающая ссылка" иногда употребляется как синоним предварительного объявления[1]. Тем не менее, чаще всего под опережающей ссылкой (обращением) понимается фактическое использование сущности до какого-либо объявления; то есть обращение к second в примере выше есть опережающая ссылка[2][3]. Таким образом, ввиду того, что предварительное объявление в Паскале обязательно, опережающая ссылка (обращение) в нём запрещена.

Пример опережающей ссылки в C++:

class C {
public:
   void mutator(int x) { myValue = x; }
   int accessor() { return myValue; }
private:
   int myValue;
};

В этом примере два использования атрибута myValue до его объявления. C++ в целом запрещает опережающее обращение. Оно дозволено для особого случая: членов класса. Метод, изменяющий атрибут, не может быть скомпилирован до того, как компилятору станет известно о существовании myValue. Поэтому в ответственность компилятора входит помнить описание метода, пока он не увидит объявление myValue.

Обслуживание опережающих ссылок (обращений) может значительно увеличить сложность и требования к памяти компилятора. Обычно это становится препятствием к реализации компилятора в один проход.

См. также

Объявление (информатика)

Ссылки

  1. MSDN: Converting to a Forward-Reference Class Type
  2. http://pages.cs.wisc.edu/~fischer/cs536.s07/lectures/Lecture25.4up.pdf
  3. Thinking in C++: Inlines & the compiler

Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Предварительное объявление" в других словарях:

  • анонс — (предварительное объявление о предстоящей лекции, концерте, спектакле, о гастролях и т. п.) о чем. Карташев взял из рук Шацкого афишу с анонсом о бенефисе итальянки (Гарин Михайловский) …   Словарь управления

  • Advance advertisement — Предварительное объявление, анонс …   Краткий толковый словарь по полиграфии

  • АНОНС — извещение, уведомление. Полный словарь иностранных слов, вошедших в употребление в русском языке. Попов М., 1907. АНОНС уведомление, объявление. Словарь иностранных слов, вошедших в состав русского языка. Павленков Ф., 1907. ано …   Словарь иностранных слов русского языка

  • анонс — а м. annonce f. 1. театр. Объявление со сцены о следующих спектаклях. Кажется, Гедеонову также мы обязаны уничтожением так называемых анонсов , т.е. возвещений публике о спектаклях на следующие дни. Мои артисты обязаны были ежедневно, по очереди …   Исторический словарь галлицизмов русского языка

  • Китайский рок — Цуй Цзянь считается «отцом» китайского рока …   Википедия

  • C++11 — C++11[1][2] или ISO/IEC 14882:2011[3] (в процессе работы над стандартом носил условное наименование C++0x[4][5])  новая версия стандарта языка C++, вместо ранее действовавшего ISO/IEC 14882:2003. Новый стандарт включает дополнения в ядре… …   Википедия

  • Блокада (морск.) — (морск.) Особый вид военных действий на море, посредством которого воюющие державы стараются запереть своим флотом моря, заливы, реки и порты неприятеля для того, чтоб голодом и недостатком военных припасов принудить к сдаче данный пункт, для… …   Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

  • Анонс — м. Предварительное объявление о предстоящем спектакле, концерте и т.п. Толковый словарь Ефремовой. Т. Ф. Ефремова. 2000 …   Современный толковый словарь русского языка Ефремовой

  • АНОНС — АНОНС, а, муж. (книжн.). Предварительное объявление (о спектакле, концерте, каком н. зрелище). | прил. анонсный, ая, ое и анонсовый, ая, ое. Толковый словарь Ожегова. С.И. Ожегов, Н.Ю. Шведова. 1949 1992 …   Толковый словарь Ожегова

  • анонсный — АНОНС, а, м. (книжн.). Предварительное объявление (о спектакле, концерте, каком н. зрелище). Толковый словарь Ожегова. С.И. Ожегов, Н.Ю. Шведова. 1949 1992 …   Толковый словарь Ожегова


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»