Функции в программировании на C с примерами: рекурсивные и встроенные
⚡ Умное резюме
Функции в языке C — это многократно используемые блоки кода, которые разбивают большую программу на более мелкие подпрограммы, что упрощает понимание, тестирование и модификацию. Каждая функция имеет объявление, определение и вызов.

Что такое функция в C?
Функция в программировании на C Функции — это многократно используемый блок кода, который упрощает понимание и тестирование программы, а также позволяет легко модифицировать её без изменения вызывающей программы. Функции разделяют код и модульно структурируют программу для достижения лучших и более эффективных результатов. Короче говоря, большая программа делится на различные подпрограммы, которые называются функциями.
Когда вы разделяете большую программу на различные функции, становится легко управлять каждой функцией индивидуально. Всякий раз, когда в программе возникает ошибка, вы можете легко исследовать ошибочные функции и исправить только эти ошибки. Вы можете легко вызывать и использовать функции, когда они необходимы, что автоматически приводит к экономии времени и места.
Библиотека против. Пользовательские функции
Каждая программа на языке C имеет по крайней мере одну функцию, которая является основной, но программа может иметь любое количество функций. Функция main() в C — это отправная точка программы.
В программировании на языке C функции делятся на два типа:
- Библиотечные функции
- Пользовательские функции
Разница между библиотечными и пользовательскими функциями в C заключается в том, что нам не нужно писать код для библиотечной функции. Он уже присутствует в заголовочном файле, который мы всегда включаем в начало программы. Вам просто нужно ввести имя функции и использовать его вместе с правильным синтаксисом. Printf, scanf — примеры библиотечных функций.
Принимая во внимание, что определяемая пользователем функция — это тип функции, в котором нам приходится писать тело функции и вызывать ее всякий раз, когда нам требуется, чтобы функция выполнила какую-либо операцию в нашей программе.
Пользовательская функция на языке C всегда пишется пользователем, но позже она может стать частью библиотеки C. Это главное преимущество программирования на языке C.
Функции программирования на языке C разделены на три вида деятельности, такие как:
- Объявление функции
- Определение функции
- Вызов функции
Объявление функции
Объявление функции означает указание имени функции в программе. Это обязательная часть для использования функций в коде. В объявлении функции мы просто указываем имя функции, которую собираемся использовать в программе, подобно объявлению переменной. Мы не можем использовать функцию, если она не объявлена в программе. Объявление функции также называется «прототипом функции».
Объявления функций (называемые прототипом) обычно выполняются над функцией main() и имеют общий вид:
return_data_type function_name (data_type arguments);
- Параметр return_data_type указывает тип данных функции, возвращаемой вызывающему оператору.
- Имя функции (function_name) указывается в скобках.
- Имена аргументов вместе с их объявлениями типов данных могут быть помещены в скобки (по желанию).
Рассмотрим следующую программу, которая показывает, как объявить кубическую функцию для вычисления кубического значения целочисленной переменной.
#include <stdio.h> /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main() {
Имейте в виду, что функция не обязательно возвращает значение. В данном случае используется ключевое слово void.
Например, объявление функции output_message указывает, что функция не возвращает значение: void output_message();
Определение функции
Определение функции означает просто написание тела функции. Тело функции состоит из операторов, выполняющих определенную задачу. Тело функции состоит из одного или блока операторов. Это также обязательная часть функции.
int add(int a,int b) //function body { int c; c=a+b; return c; }
Вызов функции
Вызов функции означает вызов функции всякий раз, когда она требуется в программе. Всякий раз, когда мы вызываем функцию, она выполняет операцию, для которой была разработана. Вызов функции — это необязательная часть программы.
result = add(4,5);
Вот полный код:
#include <stdio.h> int add(int a, int b); //function declaration int main() { int a=10,b=20; int c=add(10,20); //function call printf("Addition:%d\n",c); getch(); } int add(int a,int b) //function body { int c; c=a+b; return c; }
Выход:
Addition:30
Аргументы функций
Аргументы функции используются для получения необходимых значений при вызове функции. Они соответствуют положению; первый аргумент передается первому параметру, второй — второму параметру и так далее.
По умолчанию аргументы передаются по значению, при этом вызываемой функции передается копия данных. Фактически переданная переменная при этом не изменяется.
Рассмотрим следующую программу, демонстрирующую параметры, передаваемые по значению:
int add (int x, int y); int main() { int a, b, result; a = 5; b = 10; result = add(a, b); printf("%d + %d\ = %d\n", a, b, result); return 0;} int add (int x, int y) { x += y; return(x);}
Вывод программы:
5 + 10 = 15
Имейте в виду, что значения a и b, переданные в функцию добавления, не были изменены, поскольку в параметр x было передано только его значение.
Переменная область
Область видимости переменных означает видимость переменных в коде программы.
В языке C переменные, объявленные внутри функции, являются локальными для этого блока кода и не могут быть использованы за пределами функции. Однако переменные, объявленные вне всех функций, являются глобальными и доступны из всей программы. Константы, объявленные с помощью директивы `#define` в начале программы, доступны из всей программы. Рассмотрим следующую программу, которая выводит значение глобальной переменной как из функции `main`, так и из пользовательской функции:
#include <stdio.h> int global = 1348; void test(); int main() { printf("from the main function : global =%d \n", global); test () ; return 0;} void test (){ printf("from user defined function : global =%d \n", global);}
Результат:
from the main function : global =1348 from user defined function : global =1348
Мы обсуждаем детали программы:
- Мы объявляем целочисленную глобальную переменную с начальным значением 1348.
- Мы объявляем и определяем функцию test(), которая не принимает аргументы и не возвращает значения. Эта функция печатает только значение глобальной переменной, чтобы продемонстрировать, что к глобальным переменным можно получить доступ в любом месте программы.
- Мы печатаем глобальную переменную внутри основной функции.
- Мы вызываем тестовую функцию, чтобы напечатать значение глобальной переменной.
В C, когда аргументы передаются параметрам функции, параметры действуют как локальные переменные, которые будут уничтожены при выходе из функции.
Когда вы используете весы для поддона глобальные переменные, используйте их с осторожностью, поскольку это может привести к ошибкам и они могут измениться в любом месте программы. Перед использованием их следует инициализировать.
Статические переменные
Статические переменные имеют локальную область видимости. Однако они не уничтожаются при выходе из функции. Таким образом, статическая переменная сохраняет свое значение навсегда, и к ней можно получить доступ при повторном входе в функцию. Статическая переменная инициализируется при объявлении и требует префикса static.
Следующая программа использует статическую переменную:
#include <stdio.h> void say_hi(); int main() { int i; for (i = 0; i < 5; i++) { say_hi();} return 0;} void say_hi() { static int calls_number = 1; printf("Hi number %d\n", calls_number); calls_number ++; }
Программа отображает:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Рекурсивные функции
Рассмотрим факториал числа, который вычисляется следующим образом: 6! = 6 * 5 * 4 * 3 * 2 * 1.
Этот расчет выполняется как многократное вычисление факта * (факт -1), пока факт не станет равным 1.
Рекурсивная функция — это функция, которая вызывает саму себя и включает условие выхода для завершения рекурсивных вызовов. В случае расчета факториала условием выхода является факт, равный 1. Рекурсия работает путем «наложения» вызовов до тех пор, пока условие выхода не станет истинным.
Например:
#include <stdio.h> int factorial(int number); int main() { int x = 6; printf("The factorial of %d is %d\n", x, factorial(x)); return 0;} int factorial(int number) { if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number - 1)); }
Программа отображает:
The factorial of 6 is 720
Здесь мы обсуждаем детали программы:
- Мы объявляем нашу рекурсивную функцию факториала, которая принимает целочисленный параметр и возвращает факториал этого параметра. Эта функция будет вызывать сама себя и уменьшать число до тех пор, пока не будет достигнуто выходное или базовое условие. Если условие истинно, ранее сгенерированные значения будут умножены друг на друга, и будет возвращено окончательное значение факториала.
- Мы объявляем и инициализируем целочисленную переменную со значением «6», а затем печатаем ее значение факториала, вызывая нашу функцию факториала.
Для лучшего понимания механизма рекурсии, который заключается в вызове самой функции до тех пор, пока не будет достигнут базовый случай или не будет достигнута остановка, рассмотрите следующую диаграмму.ping Условие выполнено, и после этого мы собираем предыдущие значения:
Встроенные функции
Функция в программировании на языке C используется для хранения наиболее часто используемых инструкций. Он используется для модульной организации программы.
Всякий раз при вызове функции указатель инструкции переходит к определению функции. После выполнения функции указатель инструкции возвращается к оператору, из которого он перешел к определению функции.
Всякий раз, когда мы используем функции, нам требуется дополнительный указатель head, чтобы перейти к определению функции и вернуться к оператору. Чтобы устранить необходимость в таких указателях, мы используем встроенные функции.
Во встроенной функции вызов функции напрямую заменяется реальным программным кодом. Он не переходит ни к одному блоку, поскольку все операции выполняются внутри встроенной функции.
Встроенные функции в основном используются для небольших вычислений. Они не подходят, когда задействованы большие вычисления.
Встроенная функция похожа на обычную функцию, за исключением того, что ключевое слово inline помещается перед именем функции. Встроенные функции создаются с помощью следующего синтаксиса:
inline function_name ()
{
//function definition
}
Давайте напишем программу для реализации встроенной функции.
inline int add(int a, int b) //inline function declaration { return(a+b); } int main() { int c=add(10,20); printf("Addition:%d\n",c); getch(); }
Выход:
Addition: 30
Приведенная выше программа демонстрирует использование встроенной функции для сложения двух чисел. Как мы видим, мы вернули сложение двух чисел внутри встроенной функции только без написания дополнительных строк. Во время вызова функции мы только что передали значения, которые необходимо сложить.




