Что такое функция в C?
Функция в программировании на C - это многократно используемый блок кода, который упрощает понимание, тестирование программы и может быть легко изменен без изменения вызывающей программы. Функции разделяют код и разбивают программу на модули для получения лучших и эффективных результатов. Короче говоря, большая программа делится на различные подпрограммы, которые называются функциями.
Когда вы разделяете большую программу на различные функции, становится легко управлять каждой функцией по отдельности. Всякий раз, когда в программе возникает ошибка, вы можете легко исследовать неисправные функции и исправлять только эти ошибки. Вы можете легко вызывать и использовать функции, когда они требуются, что автоматически приводит к экономии времени и пространства.
В этом руководстве вы узнаете:
- Библиотека Vs. Пользовательские функции
- Объявление функции
- Определение функции
- Вызов функции
- Аргументы функции
- Переменная область видимости
- Статические переменные
- Рекурсивные функции
- Встроенные функции
Библиотека Vs. Пользовательские функции
Каждая программа на языке C имеет по крайней мере одну функцию, которая является основной функцией, но программа может иметь любое количество функций. Функция main () в C - это отправная точка программы.
В программировании на языке C функции делятся на два типа:
- Библиотечные функции
- Пользовательские функции
Разница между библиотечными и пользовательскими функциями в C заключается в том, что нам не нужно писать код для библиотечной функции. Он уже присутствует в файле заголовка, который мы всегда включаем в начало программы. Вам просто нужно ввести имя функции и использовать его вместе с правильным синтаксисом. Printf, scanf - это примеры библиотечной функции.
Принимая во внимание, что определяемая пользователем функция - это тип функции, в которой мы должны написать тело функции и вызывать функцию всякий раз, когда нам требуется, чтобы функция выполнила какую-либо операцию в нашей программе.
Пользовательская функция в C всегда пишется пользователем, но позже она может быть частью библиотеки C. Это главное преимущество программирования на "C".
Функции программирования на C делятся на три вида деятельности, такие как:
- Объявление функции
- Определение функции
- Вызов функции
Объявление функции
Объявление функции означает написание имени программы. Это обязательная часть для использования функций в коде. В объявлении функции мы просто указываем имя функции, которую собираемся использовать в нашей программе как объявление переменной. Мы не можем использовать функцию, если она не объявлена в программе. Объявление функции также называется « прототипом функции ».
Объявления функции (называемые прототипом) обычно выполняются над функцией main () и имеют общую форму:
return_data_type function_name (data_type arguments);
- Return_data_type : это тип данных значения функции вернулась обратно в вызывающем заявлении.
- Имя_функции : следуют круглые скобки
- Имена аргументов с объявлениями их типов данных необязательно помещаются в круглые скобки.
Мы рассматриваем следующую программу, которая показывает, как объявить функцию куба для вычисления кубического значения целочисленной переменной.
#include/*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);
Вот полный код:
#includeint add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("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 в верхней части программы, доступны из всей программы. Мы рассматриваем следующую программу, которая печатает значение глобальной переменной как из основной, так и из пользовательской функции:
#includeint 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 =1348from user defined function : global =1348
Обсуждаем детали программы:
- Мы объявляем глобальную целочисленную переменную с начальным значением 1348.
- Мы объявляем и определяем функцию test (), которая не принимает аргументов и не возвращает значение. Эта функция только печатает значение глобальной переменной, чтобы продемонстрировать, что к глобальным переменным можно получить доступ в любом месте программы.
- Мы печатаем глобальную переменную внутри основной функции.
- Мы вызываем тестовую функцию в порядке, чтобы распечатать значение глобальной переменной.
В C, когда аргументы передаются параметрам функции, параметры действуют как локальные переменные, которые будут уничтожены при выходе из функции.
Когда вы используете глобальные переменные, используйте их с осторожностью, потому что это может привести к ошибкам, и они могут измениться в любом месте программы. Их следует инициализировать перед использованием.
Статические переменные
Статические переменные имеют локальную область видимости. Однако они не уничтожаются при выходе из функции. Следовательно, статическая переменная сохраняет свое значение навсегда, и к ней можно будет получить доступ при повторном входе в функцию. Статическая переменная инициализируется при объявлении и требует префикса static.
Следующая программа использует статическую переменную:
#includevoid 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 1Hi number 2Hi number 3Hi number 4Hi number 5
Рекурсивные функции
Рассмотрим факториал числа, которое вычисляется следующим образом 6! = 6 * 5 * 4 * 3 * 2 * 1.
Этот расчет выполняется как многократное вычисление факта * (факт -1) до тех пор, пока факт не станет равным 1.
Рекурсивная функция - это функция, которая вызывает сама себя и включает условие выхода для завершения рекурсивных вызовов. В случае вычисления факториального числа условие выхода фактически равно 1. Рекурсия работает путем «складывания» вызовов до тех пор, пока условие выхода не станет истинным.
Например:
#includeint 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 */elsereturn (number * factorial(number - 1));}
Программа отображает:
The factorial of 6 is 720
Здесь мы обсуждаем детали программы:
- Мы объявляем нашу рекурсивную функцию факториала, которая принимает целочисленный параметр и возвращает факториал этого параметра. Эта функция будет вызывать сама себя и уменьшать число до тех пор, пока не будет выполнено выходное или базовое условие. Когда условие истинно, ранее сгенерированные значения будут умножены друг на друга, и будет возвращено окончательное значение факториала.
- Мы объявляем и инициализируем целочисленную переменную со значением «6», а затем выводим ее факториальное значение, вызывая нашу факториальную функцию.
Рассмотрим следующую диаграмму, чтобы лучше понять рекурсивный механизм, который заключается в вызове самой функции до тех пор, пока не будет достигнут базовый случай или условие остановки, а после этого мы собираем предыдущие значения:
Встроенные функции
Функция в программировании на C используется для хранения наиболее часто используемых инструкций. Он используется для модульного построения программы.
Всякий раз, когда вызывается функция, указатель инструкции переходит к определению функции. После выполнения функции указатель инструкции возвращается к оператору, откуда он перешел к определению функции.
Всякий раз, когда мы используем функции, нам требуется дополнительный заголовок указателя, чтобы перейти к определению функции и вернуться к оператору. Чтобы исключить необходимость в таких заголовках указателей, мы используем встроенные функции.
Во встроенной функции вызов функции напрямую заменяется реальным программным кодом. Он не переходит ни к одному блоку, потому что все операции выполняются внутри встроенной функции.
Встроенные функции в основном используются для небольших вычислений. Они не подходят, когда задействованы большие вычисления.
Встроенная функция похожа на обычную функцию, за исключением того, что ключевое слово 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
Вышеупомянутая программа демонстрирует использование встроенной функции для сложения двух чисел. Как мы видим, мы вернули сложение двух чисел только внутри встроенной функции, не написав никаких дополнительных строк. Во время вызова функции мы только что передали значения, для которых нужно выполнить сложение.
Резюме
- Функция - это мини-программа или подпрограмма.
- Функции используются для модульного построения программы.
- Библиотечные и пользовательские - это два типа функций.
- Функция состоит из объявления, тела функции и части вызова функции.
- Объявление и тело функции являются обязательными.
- Вызов функции в программе может быть необязательным.
- Программа C имеет по крайней мере одну функцию; это основная функция ().
- Каждая функция имеет имя, тип данных возвращаемого значения или пустые параметры.
- Каждая функция должна быть определена и объявлена в вашей программе на C.
- Имейте в виду, что обычные переменные в функции C уничтожаются, как только мы выходим из вызова функции.
- Аргументы, переданные в функцию, не будут изменены, потому что они не переданы по значению по адресу.
- Область видимости переменных называется видимостью переменных в программе.
- В программировании на C есть глобальные и локальные переменные