Функции в C: руководство для начинающих

Функции в языке Си – небольшие подпрограммы, выносящие повторяющийся код в отдельные блоки для многократного использования. Это повышает читаемость и упрощает отладку.

Создание функции

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

Объявление функции начинается с указания типа возвращаемого значения. Тип void используется, если функция ничего не возвращает. Функция main возвращает целое число (int), обычно 0 (успешное завершение).

Пример функции, выводящей сообщение:

void info() {
  printf("Привет!\n");
}

void указывает на отсутствие возвращаемого значения, info – имя функции, () – отсутствие аргументов, {} – тело функции. printf("Привет!\n"); выводит «Привет!» на консоль, \n – перевод курсора на новую строку.

Вызов функции осуществляется указанием её имени:

int main() {
  info();
  return 0;
}

Параметры и вызов функции

Функцию можно вызывать многократно:

int main() {
  info();
  info();
  info();
  return 0;
}

Выведет «Привет!» трижды. Функции могут принимать параметры, передаваемые в скобках при объявлении и вызове.

Пример функции, суммирующей два целых числа:

void sum(int a, int b) {
  int c = a + b;
  printf("Результат: %d\n", c);
}

int main() {
  sum(20, 50);
  int x = 5;
  int y = 7;
  sum(x, y);
  return 0;
}

Объявление функции и прототипы

Компилятор обрабатывает код сверху вниз. Вызов функции до её объявления приводит к ошибке. Прототипы функций решают эту проблему:

void info(); // Прототип функции

int main() {
  info();
  // ... остальной код ...
}

void info() {
  // ... тело функции ...
}

Прототип – первое объявление функции, содержащее информацию о типе возвращаемого значения, имени и параметрах. Он размещается перед main. Альтернативно, функции можно объявлять перед main, но при большом количестве функций это снижает читаемость. Поэтому предпочтительнее использовать прототипы и размещать реализации функций после main.

Заголовочные файлы

Более удобный способ управления функциями – использование заголовочных файлов (.h). Создайте файл (например, funk.h) с объявлениями функций и подключайте его в основной программе с помощью #include:

// funk.h
void info();
void sum(int a, int b);

// main.c
#include "funk.h"
#include <stdio.h>

int main() {
  // ... вызовы функций ...
}

// Реализация функций из funk.h
void info() { /* ... */ }
void sum(int a, int b) { /* ... */ }

Заголовочный файл содержит только прототипы. Реализации находятся в отдельном .c файле. В main.c подключается заголовочный файл и stdio.h (можно исключить из funk.h, если используется только в main.c).

Функции с возвращаемым значением

Функции возвращают значения с помощью return.

Пример функции, умножающей два числа и возвращающей результат типа float:

float mode(float a, float b) {
  float res = a * b;
  return res;
}

int main() {
  float result = mode(8.0, 35.5);
  printf("Результат: %.2f\n", result);
  return 0;
}

mode возвращает значение переменной res типа float. В main возвращаемое значение сохраняется в result и выводится.

Функции в Си повышают эффективность и читабельность кода, позволяя структурировать программу в логические блоки и повторно использовать код. Заголовочные файлы способствуют организации и модульности кода.

Что будем искать? Например,программа