C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C функції. Визначення та опис функцій


функції


Визначення та опис функцій

Якщо змінні і константи зберігають стан програми, то функції визначають її дії.

Формальне визначення функції виглядає наступним чином:

тип імя_функції(параметри)
{
    // виконувані_вирази
}

Перший рядок представляє заголовок або сигнатуру функції. Спочатку вказується повертаючий тип функції. Якщо функція не повертає ніякого значення, то використовується тип void .

Потім йде ім'я функції, яке представляє довільний ідентифікатор, до якого застосовуються ті ж правила, що і до іменування змінних.

Після імені функції в дужках йде перерахування параметрів. Функція може не мати параметрів, в цьому випадку вказуються порожні дужки.

Після заголовка функції в фігурних дужках йде тіло функції, яке містить виконувані вирази.

Для повернення результату функція використовує оператор return , який має такі способи використання:

return;
return вираз;

Перша форма може використовуватися в тих функціях, які не повертають жодного значення, тобто мають в якості повертаючий тип void .

Друга форма застосовується, якщо функція має в якості повертаючого типу будь-який тип, крім void . Вираз після оператора return представляє повертаюче значення.

Для виконання функції її необхідно викликати. Виклик функції здійснюється в формі:

імя_функції(аргументи);

Після імені функції вказуються дужки, в яких перераховуються аргументи - значення для параметрів функції.

Визначимо найпростішу функцію:

#include <stdio.h>
 
void hello()       // оголошення функції hello(), де void означає що функція нічого не повертає
{
    printf("Hello!\n");      // виводимо повідомлення "Hello!" в консоль
}
 
int main(void)
{   
    hello();     // Hello!\n    // використовуємо нашу функцію hello() для виводу повідомлення
    hello();     // Hello!\n
    return 0;
}

// RESULT:
// Hello!
// Hello!

Тут визначена функція hello , яка просто виводить в консоль рядок " Hello! ". Ця функція має тип void , тобто вона нічого не повертає.

У будь-якій програмі повинна бути як мінімум одна функція, яка має фіксоване ім'я main() . Саме з функції main починається виконання. Тому якщо ми хочемо виконати функцію hello , то нам треба її викликати в функції main .

Також варто відзначити, що функція main як повертаючий тип має тип int , тому вона в обов'язковому порядку повинна повернути будь-яке значення типу int за допомогою оператора return . Тому в кінці тіла функції варто викликати return 0; . Згідно умови як індикатор успішного виконання функція main повертає число 0 .

В даному випадку функція hello викликається два рази. В цьому і полягає користь функції: ми можемо винести деяку загальну дію, яка може складатися з декількох рядків, в окрему функцію і потім викликати багаторазово в різних місцях програми.

В результаті програма два рази виведе рядок " Hello ".


Прототип або опис функції

Тут варто врахувати важливий момент - компілятор повинен знати про функції до її виклику. Тому виклик функції повинен відбуватися після її визначення, як у випадку вище. У деяких мовах це не має значення, але в мові Сі це грає велику роль. І якщо, наприклад, ми спочатку викличемо, а потім визначимо функцію, то ми отримаємо помилку на етапі компіляції, як в наступному випадку:

int main(void)
{
    hello();
    hello();
    return 0;
}
 
void hello()
{
    printf("Hello!\n");
}

Але є й інший спосіб, який полягає в використанні опису функції. Опис функції ще називають прототипом . Формальне визначення прототипу виглядає наступним чином:

тип імя_функції(параметри);

Фактично це заголовок функції. Тобто для функції hello прототип буде виглядати наступним чином:

void hello();

Застосуємо прототип функції:

#include <stdio.h>
 
// опис прототипу функції
void hello();
 
int main(void)
{
    hello();
    hello();
    return 0;
}
 
// визначення функції
void hello()
{
    printf("Hello!\n");
}

В даному випадку не дивлячись на те, що визначення функції йде після її виклику, але так як її опис йде до виклику, то компілятор вже буде знати про функції hello , і ніяких проблем в роботі програми не виникне.


Наш партнер:
beta test mp3 playlist downloader