248 __ ______Часть II. Программирование на C++

в помещении ее объявления в заголовке (файле с расширением .h) и включении заголовка в модуль с помощью директивы # include. Препроцессор при компиляции произведет замещение текста, так что эффект будет такой же, как если бы вы поместили объявление в самом модуле (чтобы подробнее узнать об использовании директивы #include, обратитесь к главе 4 "Препроцессор").

Совет

Если вы собираетесь использовать функцию только в одном модуле, то и объявить ее можно в одном этом модуле. Если же вы собираетесь использовать функцию в нескольких модулях, разместите объявление функции в заголовке: это избавит вас от необходимости многократно объявлять ее и тем самым уменьшит вероятность ошибок.

C++ требует объявления функций перед их первым использованием по нескольким причинам. Одна из них состоит в том, что, как показывает практика программирования на С, необъявленные функци^ становятся щедрым источником ошибок. Другая причина — это перегрузка функций в C++, которая осуществляется (об этом вы прочтете в главе 15) на основе информации об имени функции и о ее аргументах.

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

Теперь мы последовательно и обстоятельно начнем рассматривать одну за другой все составляющие части функций — изнутри и снаружи. Понимание тонкостей работы функций очень поможет вам в эффективном решении возникающих проблем.

Типы возвращаемых значений

Самыми очевидными кандидатами на роль типов возвращаемых значений являются базовые типы данных. Это значит, что в качестве возвращаемых типов обычно используются void, char, int, float и double. Возвращаемое значение — это один из способов передачи функцией информации вызывающей процедуре. Возврат значения функции осуществляется оператором return, в котором указывается возвращаемая переменная. ,

Допустим, функция должна возвратить значение типа double:

double Pi( int precision) (

double pi;