Що таке функція в C?
Функція програмування на C - це багаторазовий блок коду, який полегшує програму для розуміння, тестування та може бути легко модифікований без зміни програми, що викликає. Функції розділяють код і модулюють програму для отримання кращих та ефективних результатів. Коротше кажучи, більша програма поділяється на різні підпрограми, які називаються функціями
Коли ви поділяєте велику програму на різні функції, стає легко керувати кожною функцією окремо. Щоразу, коли в програмі виникає помилка, ви можете легко дослідити несправні функції та виправити лише ці помилки. Ви можете легко викликати та використовувати функції, коли вони потрібні, що автоматично призводить до економії часу та простору.
У цьому підручнику ви дізнаєтесь-
- Бібліотека проти Функції, визначені користувачем
- Декларація про функції
- Визначення функції
- Виклик функції
- Аргументи функції
- Змінна сфера
- Статичні змінні
- Рекурсивні функції
- Вбудовані функції
Бібліотека проти Функції, визначені користувачем
Кожна програма "C" має принаймні одну функцію, яка є основною, але програма може мати будь-яку кількість функцій. Функція main () на мові C є початковою точкою програми.
У програмуванні на "С" функції поділяються на два типи:
- Бібліотечні функції
- Функції, визначені користувачем
Різниця між бібліотекою та визначеними користувачем функціями в C полягає в тому, що нам не потрібно писати код для функції бібліотеки. Він уже присутній у файлі заголовка, який ми завжди включаємо на початку програми. Вам просто потрібно ввести ім’я функції та використовувати його разом із правильним синтаксисом. Printf, scanf - приклади бібліотечної функції.
Тоді як визначена користувачем функція - це тип функції, в якій нам доводиться писати тіло функції і викликати функцію щоразу, коли нам потрібна функція для виконання якоїсь операції в нашій програмі.
Користувацька функція в C завжди записується користувачем, але пізніше вона може бути частиною бібліотеки 'C'. Це головна перевага програмування на С.
Функції програмування C поділяються на три види діяльності, такі як:
- Оголошення функції
- Визначення функції
- Виклик функції
Декларація про функції
Оголошення функції означає написання імені програми. Це обов'язкова частина для використання функцій у коді. У оголошенні функції ми просто вказуємо ім'я функції, яку ми будемо використовувати в нашій програмі, як оголошення змінної. Ми не можемо використовувати функцію, якщо вона не оголошена в програмі. Оголошення функції також називається " Прототип функції ".
Оголошення функцій (так звані прототип) зазвичай виконуються над основною функцією () і приймають загальний вигляд:
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 (), яка не приймає аргументи та не повертає значення. Ця функція друкує лише значення глобальної змінної, щоб продемонструвати, що глобальні змінні можна отримати в будь-якому місці програми.
- Ми друкуємо глобальну змінну всередині основної функції.
- Ми викликаємо функцію тесту в orde для друку значення глобальної змінної.
У 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 знищуються, як тільки ми виходимо із виклику функції.
- Аргументи, передані функції, не будуть змінені, оскільки вони передаються за значенням none за адресою.
- Область дії змінної називається видимістю змінних у програмі
- У програмуванні на С є глобальні та локальні змінні