[return [РВ];]
}
где имя – идентификатор (название) функции;
тип – описатель типа функции (результата);
bi – список (перечисление через запятую) формальных параметров, используемых в вычислениях (действиях) тела функции с указанием типа каждого;
описатели bi – операторы описания типов формальных параметров, выполненные вне заголовка;
( ) – ограничители списка формальных параметров;
тело функции – основная часть (совокупность операторов), реализующая вынесенные в отдельный алгоритм вычисления (действия);
return РВ; – оператор возврата (return) результата вычислений;
РВ – результат вычислений (выражение);
[ ] – признак необязательности содержимого;
{ } – ограничители тела функции.
Первая строка структуры является заголовком функции.
Структура вызова функции:
имя ([a1, . . . , ai, . . . , an])
где имя – идентификатор функции;
a1, ai, an – список (перечисление через запятую) фактических параметров (аргументов), численные значения которых требуется передать в дополнительную функцию (подпрограмму);
( ) – ограничители аргументов;
[ ] – признак необязательности содержимого.
Правила записи и использования
1. Различия структур определения функций обусловлено возможностью использования различных средств машинной обработки создаваемых программ. Большинство средств поддерживают оба варианта.
2. Деление функций на главную и дополнительные осуществляется по имени. Главной является функция с именем main (головная). В этой функции в большинстве случаев описатель типа, список формальных параметров и оператор return не указываются.
3. Дополнительной считается функция с любым, кроме main, именем. Для пользовательских функций имена формируются самим пользователем аналогично идентификаторам переменных. Для стандартных – указываются в технической документации.
4. Функция предписывает выполнение указанных в теле вычислений (действий) с операндами – формальными параметрами, идентификаторы которых указаны в списке заголовка.
5. В качестве формальных параметров используются переменные и указатели.
6. Физически формальные параметры (переменные) – дополнительные ячейки памяти, предназначенные для временного хранения, передаваемых им значений фактических параметров.
7. Количество, типы и последовательность расположения формальных параметров в списке задается создателем функции.
8. В функции наряду с формальными параметрами могут использоваться вспомогательные (локальные) переменные.
9. Для возврата результата вычисления тела функции дополняются выражением оператора return. В качестве выражения могут использоваться константы, переменные и их совокупности. Результаты вычислений тела функции – константы.
10. В основную (вызывающую) функцию передается значение только одной константы – результата вычисления выражения return. Поэтому, если все планируемые в алгоритме вычисления могут быть сведены к одной формуле, их можно оформить в качестве выражения return.
11. Тип возвращаемого значения определяется типом функции. Если он не указан, подразумевается целочисленный результат (int). Результат возвращается в точку вызова.
12. В функции при необходимости могут быть несколько операторов возврата (return), располагаемых в теле функции в соответствии с требованиями алгоритма.
13. В головной функции оператор return можно не указывать (результат не требуется возвращать куда-либо). В этом случае на этапе компиляции может выдаваться соответствующее предупреждение.
14. Головная и дополнительные функции – есть отдельные программные модули. Поэтому в них могут использоваться одноимённые переменные, указатели и массивы.
15. Тексты (определения) дополнительных пользовательских функций могут располагаться в любом месте программы (вне тела любой из функций), стандартных – в соответствующих библиотеках языка Си в виде объектных модулей.
16. Независимо от взаиморасположения функций выполнение программного модуля начинается с головной функции.
17. Из тела каждой функции можно обращаться к любой другой, а также и к ней самой.
18. Фактические и формальные параметры в списках должны совпадать по количеству, месту расположения и типу.
19. В качестве фактических параметров используются константы, переменные, вызовы дополнительных функций, арифметические выражения, адреса переменных и массивов.
20. Вызов дополнительной функции требует ее предварительного определения (расположение над вызывающей). В противном случае её необходимо описать (задать прототипом). Описание размещается над вызывающей функцией. Описания стандартных функций (их прототипы) находятся в стандартных заголовочных файлах.
Прототип является конструкцией, аналогичной описателям переменных, что позволяет проверить указанные в вызове типы фактических параметров и возвращаемого результата на соответствие указанным в заголовке функции.
Прототип функции аналогичен ее заголовку и имеет структуру
[тип] имя([тип [b1], . . . ,тип [bi], . . . ,тип [bn]]);
где имя – идентификатор (название) функции;
тип – описатель типа функции (результата);
b1, bi, bn – список (перечисление через запятую) формальных параметров с указанием типа;
( ) – ограничители списка формальных параметров;
[ ] – признак необязательности содержимого;
; – признак оператора.
В списке допускается указывать только типы формальных параметров.
Рассмотрим конкретные примеры определения, вызова, и описания функций.
Пример взаимодействия головной функции с одной пользовательской и стандартными