Определение функции имеет следующую структуру:
тип имя_функции (список параметров) /* заголовок функции */
{ /* тело функции - блок */
описания данных; /* необязательная часть */
операторы; /* обязательная часть */
}
Рассмотрим составляющие заголовка функции.
тип – задает тип возвращаемого функцией значения (по умолчанию принят тип int); если функция не возвращает значения, то используется ключевое слово void (отсутствие типа).
имя_функции (произвольный идентификатор) – это особый тип указателя-константы, называемого указателем на функцию, и его значением является адрес точки входа в функцию. Имени функции может предшествовать символ *. Это значит, что функция возвращает указатель (адрес) на некоторый объект любого типа, в том числе на массив и другую функцию.
список параметров задает последовательность формальных параметров, разделяемых запятыми. Каждый параметр определяется его типом и именем с возможными модификаторами, описывающими указатель – *, массив – [], функцию – (). При отсутствии параметров список может быть пустым, либо содержит ключевое слово void.
|
|
В конце заголовка функции разделитель точка с запятой не ставится.
Примеры заголовков функций:
int save (float value) или save (float value)
void getline (char array[], int size)
float fget () или float fget(void)
char *strcpy(char *tp, char *sp)
Совокупность предложений в фигурных скобках {} называют телом функции. Тело функции образует блок (или составной оператор), определяющий действия функции и её результаты. Блок может содержать описания переменных, используемых в этом блоке, поэтому эти переменные являются локальными, если не объявлено иначе. Операторы тела функции выполняются, пока не встретится оператор return (возврат) или конец функции (последняя закрывающая фигурная скобка – }), при этом управление возвращается в точку вызова функции.
Функция возвращает значение, если встретится оператор возврата вида
return выражение или return (выражение),
при этом значение выражения приводится к типу функции. Если оператор return не содержит выражения или отсутствует, то значение не возвращается, а только передается управление в точку вызова функции с типом void.
Пример. Составить функцию вычисления суммы двух целых чисел.
а) int sum (int a, int b) /* заголовок функции */
{ int m; /* локальная переменная */
m=a+b; /* получение результата */
return m; /* возврат значения функции */
}
б) Более короткий вариант:
sum (int a, int b)
{ return a+b; }