Функции в языке Си – небольшие подпрограммы, выносящие повторяющийся код в отдельные блоки для многократного использования. Это повышает читаемость и упрощает отладку.
Создание функции
Функции создаются вне функции 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 и выводится.
Функции в Си повышают эффективность и читабельность кода, позволяя структурировать программу в логические блоки и повторно использовать код. Заголовочные файлы способствуют организации и модульности кода.