Функция — некий «чёрный ящик». В этот ящик попадают входные данные, над ними производятся некие манипуляции, а на выходе из этого ящика мы получаем результат.

cs50 функция

Если вы решали задачник первой недели, вы уже успели познакомиться с функциями GetInt (), GetString (), printf (). Каждая из них получает на вход определенные данные, выполняет определенные действия и возвращает определенный результат.

Зачем нужны функции

  • Упорядочивание кода. Код гораздо проще поддерживать, если он разбит на функции, и каждая из них делает чётко определенную небольшую часть работы.
  • Упрощение кода. Вам не нужно знать, как работает функция, главное — результат её работы. Это упрощает понимание большой программы.
  • Повторное использование. Если вам нужно сделать подобные действия в различных частях программы, можно написать всего одну функцию, и использовать её многократно.

Структура функции

Функции имеют следующую структуру:

<тип результата> имя (список параметров)
{
    <тело функции>
}

Пример:

Структура функции - 1
#include <stdio.h>

int cube(int input); //Прототип функции cube

int main(void)
{
     int x = 2;
     printf("x is %i\n", x);
     x = cube(x);
     printf("x is %i\n", x);
}

int cube(int input)
{
     int output = input * input * input;
     return output;
}

Прототип функции

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

Тип результата (return type)

На Си нужно всегда указывать тип результата. То есть мы должны явно указать, какого типа будет то значение, которое должна вернуть функция. В примере выше, функция возвращает куб целого числа. Результат относится к типу int.

Имя функции (function name)

Любое название функции. Желательно называть функции так, чтобы было понятно, что они делают. В примере функция называется cube.

Список параметров (parameter list)

Перечень входных данных для функции. Функция может не иметь параметров, может иметь один или несколько параметров. Для каждого параметра нужно указать его имя и тип. В примере функция принимает единственный параметр — целое число int input.

Тело функции (body)

В теле описаны действия, которые выполняет функция. Слово return указывает на конец работы функции и указывает значение, которое возвращает функция в качестве результата её работы (значение переменной output в примере). Функция может и не возвращать никакого результата.