Описание функции и прототип функции — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Описание функции и прототип функции



Немного уточним описание функции:

 

[спецификатор] тип имя_функции([список_формальных_параметров])

{тело_функции}

 

Верхняя строка описания – заголовок функции, нижняя – тело. Часто заголовок функции называют объявлением (далее мы рассмотрим ещё одно понятие, связанное с заголовком, – прототип). Полное описание, включающее заголовок и тело функции, называют определением функции.

Функции могут быть определены со спецификаторами extern и static. Если функция объявлена как extern (по умолчанию все функции extern), доступ к ней возможен из любого файла проекта. Если функция объявлена как static, доступ к ней возможен только из того же файла, где она находится.

Результат функции называют возвращаемым значением. В заголовке функции задаётся тип возвращаемого значения. Если функция ничего не возвращает (в некоторых языках такие функции называются процедурами), задаётся пустой тип void.

Cписок_формальных_параметров – последовательность описаний параметров функции, разделённых запятыми. Даже если функция не имеет параметров, наличие круглых скобок обязательно. Вместо параметров в этом случае можно указать ключевое слово void. Например, стандартная функция rand() не содержит параметров (см. пример 1.5).

Тело функции – оператор или блок (возможно, пустой). Выполнение тела заканчивается, когда будут выполнены все операторы или встретился оператор return – он служит для выхода из функции и возврата значения.

Размещение определений функций. Определения функций можно по-разному разместить в файлах проекта:

· для небольших программ определения всех функций, в том числе, и функции main, можно расположить в одном файле;

· в более объёмных программных проектах функции располагаются в отдельном файле (или нескольких файлах, сгруппированные по назначению); для использования таких функций в других файлах используется директива #include (напомним, что если у функции спецификатор static, то её нельзя использовать в других файлах).

Сначала рассмотрим более простой случай – все функции в одном файле. Здесь тоже есть два варианта на выбор.

Простой вариант – расположить определения всех функций перед функцией main, если какая-либо функция вызывает другую (обращается к ней), определение вызываемой должно быть перед определением вызывающей функции – иначе компилятор будет считать имя вызываемой функции неизвестным. Этот вариант не всегда можно воплотить, особенно, если функции много раз вызывают друг друга, иногда не напрямую, а через другие функции.



Чтобы избежать этих сложностей и потенциальных ошибок при компиляции программы, рекомендуется использовать другой способ – в начале файла (перед функцией main) расположить прототипы всех функций, а определения функций поместить после функции main, причём, в этом случае уже не надо заботиться о порядке следования определений функции, поскольку каждой определение уже предварено прототипом.

Прототип функции – это её заголовок (объявление), за которым следует ";". В прототипе, в отличие от определения функции, можно опустить имена параметров, достаточно указать только их типы – именно эта информация нужна компилятору.

Например, функция для возведения числа в квадрат (в языке Pascal такая функция называется sqr):

 

//Пример 1.15 - функция, вычисляющая квадрат заданного числа

double sqr (double x){

return x*x;

}

 

Прототип этой функции: double sqr (double);

Теперь коснёмся такого способа организации программного проекта, при котором определения функций располагаются в нескольких различных файлах. В этом случае использование прототипов функций тоже оказывается очень удобным – прототипы функций размещают в отдельных заголовочных файлах, имеющих расширение .h, а полные определения функций – в другом файле с расширением .cpp. Файл с расширением .cpp обычно компилируется, а затем хранится в виде объектного кода и подключается к программе уже на этапе компоновки. Для компилятора достаточно той информации, которая содержится в заголовочном файле.

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

 

 






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

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.004 с.