C++.Бархатный путь


Функция. Прототип


Функция в C++ объявляется, определяется, вызывается. В разделе, посвящённом структуре программного модуля, в качестве примера мы уже рассматривали синтаксис определения функции. Определение функции состоит из заголовка и тела. Заголовок функции состоит из спецификаторов объявления, имени функции и списка параметров. Тело функции образуется блоком операторов.

Синтаксис выражений вызова функции ранее был рассмотрен достаточно подробно. Это постфиксное выражение со списком (возможно пустым) выражений в круглых скобках. При разборе выражения вызова, транслятору C++ требуется информация об основных характеристиках вызываемой функции. К таковым, прежде всего, относятся типы параметров, а также тип возвращаемого значения функции. При этом тип возвращаемого значения оказывается актуален лишь в том случае, если выражение вызова оказывается частью более сложного выражения.

Если определение функции встречается транслятору до выражения вызова, никаких проблем не возникает. Вся необходимая к этому моменту информация о функции оказывается доступной из её определения: #include <iostream.h> void ZZ(int param) // Определение функции. { cout << "This is ZZ >> " << param << endl; } void main (void) { ZZ(10); // Вызов функции. Транслятор уже знает о функции всё. }

При этом не принципиально фактическое расположение определения функции и выражения её вызова. Главное, чтобы в момент разбора выражения вызова в транслятор знал бы всё необходимое об этой функции. Например, в таком случае: #include <iostream.h> #include "zz.cpp" /*

Препроцессор к моменту трансляции "подключает" определение функции ZZ() из файла zz.cpp. */ void main (void) { ZZ(125); } Файл zz.cpp: void ZZ(int par1) { cout << "This is ZZ " << par1 << endl; }

Но как только в исходном файле возникает ситуация, при которой вызов функции появляются в тексте программы до определения функции, разбор выражения вызова завершается ошибкой: #include <iostream.h> void main (void) { ZZ(10); /* Здесь транслятор сообщит об ошибке. */ } void ZZ(int param) { cout << "This is ZZ " << param << endl; }




- Начало -  - Назад -  - Вперед -