Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_4_func.DOC
Скачиваний:
17
Добавлен:
17.05.2015
Размер:
113.15 Кб
Скачать

Лекція 4 Функції Основні положення

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

Cі надає програмісту великі можливості у визначенні структури програми. Якість програми залежить від уміння програміста розбити всю програму на логічно обґрунтовані функції (модулі) з добре обґрунтованим інтерфейсом і добре обґрунтованим текстом програми.

Функції – це фундаментальні конструкції Сі, зв’язані з вирішенням поставленої задачі або її частини. Функція це самостійна одиниця програми. Функції для вирішення окремого класу задач можна виділити в окремий файл. Цей файл може бути бібліотекою користувача.

Бібліотеки функцій дозволяють:

  • використовувати одні і ті ж функції різними програмістами;

  • збільшити структурованість і наочність програми;

  • полегшити читання , освоєння і корегування використовуваних програм.

Будь яка програма на мові Сі містить одну головну функцію з іменем main і будь яку кількість інших функцій.

При розгляданні функцій будуть визначені:

  1. класи пам’яті і видимість змінних функцій;

  2. визначення функцій (тексти функцій);

  3. оголошення функцій;

  4. виклик функцій;

  5. засоби обміну даними різних типів між функціями.

Визначення функцій і повернений ними результат.

Визначення функції – це її текст на мові Сі. В ньому визначається ім’я , формальні параметри, оператори тіла функції і тип поверненого результату. Кожна функція повинна мати текст функції (заголовок і тіло), може мати оголошення функції і повинна мати виклик функції для її виконання. Структура кожної функції ідентична структурі головної функції main. Визначення функції містить заголовок і тіло функції.

Тіло функції – це блок. В ньому можуть бути оголошення змінних і повинні бути оператори тіла функції. В файлі функції або в її тілі можуть бути оголошення зі спеціфікатором extern, які забезпечують посилання на зовнішні змінні, розташовані в інших файлах.

По замовчуванню всі функції зовнішні. При визначенні функції допускається клас пам’яті stаtiс, якщо треба щоб функція використовувалась тільки в даному програмному файлі. Для використання зовнішніх нестатичних функцій з інших файлів вони повинні бути оголошені в цих файлах як зовнішні, із спеціфікатором extern. Наприклад: еxtern int fun( );

Структура заголовка функції:

[специф. класа пам’яті] [тип] ім’я функції ([список формальних параметрів]), де

  • специф. класу пам’яті – специфікатор, який визначає клас пам’яті функції;

  • тип – визначає тип результату, який повертає функція за допомогою оператора return; тип- це ім’я одного з допустимих простих типів даних;

  • ім’я функції – ідентифікатор, за допомогою якого функція викликається для виконання;

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

Елементи заголовка функції в квадратних дужках не обов’язкові.

Тип результату функції, який повертається за допомогою return може бути будь-яким простим типом: арифметичним, символьним, переліковним, покажчиком на будь-який допустимий тип (в тому числі на скаляр, масив, структуру, файл або функцію). Якщо у заголовку функції не вказаний її тип і вона повертає результат за допомогою return, то по замовчанню тип дорівнює int.

Елементи списку формальних параметрів відокремлюються комами. Кожний елемент списку формальних параметрів – це оголошення одного формального параметра функції у вигляді:

ім’я типа ім’я формального параметра

Приклади заголовків функцій:

  • int f1 (int a, float b) – функція повертає за допомогою оператора return значення типу int; а і b – параметри;

  • float f2 (int c, char *d) – функція повертає за допомогою оператора return значення типу float; с і d – параметри;

  • void print( ) – заголовок функції без параметрів, не повертає ніякого значення за допомогою функції return.

Виконання функції продовжується до тих пір, поки не зустрінеться оператор return або не виконаються всі оператори тіла функції. В тілі функції може бути, а може і не бути оператор return. Якщо функція повертає результат в точку виклику, то оператор return обов’язковий, а якщо не повертає, оператора return може і не бути і виконання функції завершиться по закінченню тіла функції.

Якщо функція повертає значення результату за допомогою return, то таку функцію можна використовувати у виразах правої частини операторів присвоєння, а також у всіх виразах, де допустимі значення результату функції, в тому числі у списах фактичних параметрів інших функцій. Такі функції – аналог функцій в мові Паскаль. Але їх можна також викликати для виконання і не із виразів, аналогічно процедурам мови Паскаль. Наприклад:

y = cube (x); z=sin(x); print f (“ % f \n”, a+cos(x) );

де code, sin, printf, cos – імена функцій, які повертають результат за допомогою оператора return.

Якщо вказано, що функція повертає значення типу void, то це означає, що функція не формує і не повертає результат за допомогою return і її не можна використовувати у виразах. В тілі такої функції може бути нуль і більше операторів return, але без „виразу” після return. Результатом її виконання можуть бути значення, які передаються через список параметрів, значення глобальних змінних або виведення значень. Таку функцію треба викликати по імені зі списком фактичних параметрів як у Паскалі.

Приклад виклику функції, яка не повертає значення результату:

free(ptr); – вивільнення динамічно виділеної ОП.

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

i=f scanf(f,”%d %f”,& a,&b ); – через return

або

fscanf(f,”%d%f”,&a,&b ); – через список формальних і фактичних параметрів.

Соседние файлы в папке lexzii_08