мета-данные страницы
Это старая версия документа!
функции
// определение функции возвращаемый_тип имя_функции(параметры) { выполняемые_инструкции; } // вызов функции имя_функции(параметры);
Прототип или описание функции
Функция должна быть определена до ее вызова. Большенство компиляторов не скомпилирует данный код:
#include <stdio.h> int main(void){ hello(); // вызов до определения - ошибка return 0; } void hello(){ printf("Hello!\n"); }
Для определения функции после ее вызова сущевствуют прототипы функций:
#include <stdio.h> // прототип void hello(void); int main(void){ hello(); return 0; } // определение void hello(){ printf("Hello!\n"); }
Таким образом компилятор, на момент вызова ф-ии, уже будет знать о ней.
Параметры
// функция принимает массив символов void print_message(char message[]){ printf("%s\n", message); } // прототип выглядил бы так void print_message(char[]);
если параметров несколько, они перечисляются через запятую
параметры ф-ии можно изменять1) в теле функции
параметры могут иметь те же приставки, что и обычные переменные
Возвращаемые значения
Функция может иметь результат - некоторое значение, которое оно возвращает во внешний код.
void sum1(int x, int y){ printf("%d + %d = %d \n", x, y, x + y); } // аналогично sum1 void sum2(int x, int y){ printf("%d + %d = %d \n", x, y, x + y); return; } // возвращает int int sum3(int x, int y){ return x + y; } int result = sum(x, y);
В тех функциях, которые не возвращают никакого значения в качестве возвращаемого типа используется void. Если такой ф-ии явно не указать пустой return; - компилятор сам подставит его.
При вызове return функция завершаеться, даже если после return есть еще код
Рекурсия
функция может вызывать саму себя прямо в теле
int factorial(int n) { if (n == 1) { return 1; } return n * factorial(n - 1); }