Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnyk_C.doc
Скачиваний:
23
Добавлен:
03.11.2018
Размер:
1.56 Mб
Скачать

2.7 Вирази

Один і той же вираз мовою С може містити знаки всіх операцій, перечислених у розділі 2.7, константи і змiнні будь-якого типу, функцiї та круглі дужки, тому вираз не має типу. Запропонуємо визначати тип виразу за типом результату. Тоді у виразі арифметичного типу дані літерного типу будуть перетворені на числа – коди літер, а результатами виконання логічних операцій та операцій відношення буде нуль або одиниця (як про це говорилося в розділі 2.6).

Деякі компілятори дозволяють включати у символьні вирази операцію додавання, який у цьому випадку служить для з’єднання між собою декількох рядків символiв та утворення одного рядка.

Круглі дужки служать для зміни приорітету виконання операцій. Наприклад, у виразі (a+b)/2 першою виконається операція додавання, а в виразі a+b/2 – ділення.

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

2.8 Оператори

Оператором називають одиничну, логiчно завершену iнструкцiю для ЕОМ. У програмi наприкінці кожного оператора ставиться знак крапка з комою. Будь який оператор програми може мати мiтку, яка ставиться перед ним, вiддiляється вiд нього двокрапкою i являє собою iдентифiкатор. Мова С має такі оператори:

  • оператор-вираз. Найбiльш вживаним є оператор присвоєння, який складається з операцiї присвоєння, злiва вiд якої ставиться iм’я змiнної, а зправа – вираз, значення якого присвоюється цiй змiннiй;

  • порожнiй оператор, він має вигляд крапки з комою. Вживається там, де згiдно з синтаксисом повинен бути оператор, а він відсутній;

  • оператор безумовного переходу goto;

  • умовний оператор if;

  • оператор-перемикач switch;

  • оператор простого (покрокового) циклу for;

  • оператор циклу з передумовою while;

  • оператор циклу з постумовою do ... while;

  • оператор припинення break;

  • оператор продовження continue;

  • оператор повернення з пiдпрограми return;

  • блок, декiлька операторiв, взятих у фiгурнi дужки.

За числом операторів мова С порівняно небагата і може здатися, що вона має обмежені можливості, але це не так, уся її потужність криється в наявності великої кількості стандартних (вбудованих) функцій. Більше того, програміст має можливість додавати свої функції та використовувати їх, як стандартні.

3 Структура програми, директиви препроцесору

Програма мовою С складається iз сукупностi функцiй, серед яких одна є головною i називається main(), а решта – пiдпорядкованi, та директив препроцесору. Кожна функція, в т. ч. main(), має блочну структуру, тобто тіло функції охоплюється відкритою і закритою фігурними дужками. Функція main() може мати вхідні параметри, її (exe-файл) можна викликати і запускати на виконання з інших програм, в т. ч. складених іншими мовами, як підпрограму.

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

Препроцесор являє собою програму, яка обробляє початковий модуль до компiляцiї згiдно з вiдповiдними директивами. Директива препроцесору може бути розмiщена в будь-якому мiсцi початкового модуля, а область її дії поширюється на частину програми від того місця, де вона записана, до кінця програми. Директиви препроцесору пишуться спеціально створеною для них мовою. Вiд iнших об’єктiв програми вони вiдрiзняються наявнiстю знака # (дiєз). Найбiльш вживаними з них є такі:

  • include <iм’я файлу> – під’єднання до програмного модуля файлу, який знаходиться в стандартному системному каталозi;

  • include "iм’я файлу" – те ж, але в заданому каталозі. Вона працює так: спочатку компілятор шукає ім’я файлу в стандартному каталозі, а якщо він там не знайдений, то в заданому;

  • define iдентифiкатор текст – замiна в тексті програми iдентифiкатора на текст;

  • undef iдентифiкатор – вiдмiна дiї поточної директиви # define;

  • if – умовна компiляцiя, визначення, чи потрiбно пiд’єднувати до програмного модуля певну його частину. Ця директива багато де в чому подібна до умовного оператора if. Вона може містити логічні операції та знаки операцій відношення;

  • else – альтернатива до директиви #if;

  • elif – дозволяє розширити комбінацію директив if–else, встановити додаткові умови та відповідні їм дії. Цю директиву можна застосувати лише для деяких найновіших компіляторів;

  • endif – кінець області дії директиви #if;

  • error текст – обробка помилок пiд час компiляцiї програми;

  • – порожня директива, iгнорується компiлятором.

Завдяки наявності директив препроцесору програміст має можливість регулювати довжину програми. Наприклад, якщо в програмі використовуються математичні функції, то слід використати директиву #include<math.h>, тоді компілятор додасть до програми файл math.h з відповідними математичними функціями, і не варто – в протилежному випадку. Додамо, що мова С має порівняно багато різних стандартних (вбудованих) функцій, з яких доцільно під’єднувати до програмного модуля лише потрібні.

Директива #if дозволяє регулювати використання тих або інших функцій залежно від типу комп’ютера та операційної системи, попереджувати повторне під’єднання директивою #include одних і тих же функцій тощо.

Директива #error, як правило, встановлюється всередині директиви #if, тоді вона видає повідомлення про помилку, якщо задовільняється певна задана умова;

Дія директиви #define поширюється не лише на директиви препроцесору, але й на весь програмний блок. Нею програміст може скористатися для заміни в програмі ідентифікатора на константу і таким чином зекономити пам’ять. Але вона невигідна тоді, коли ідентифікатор – ім’я змінної, яка в процесі виконання програми приймає різні значення, бо змінити їх неможливо. Цю директиву називають ще макросом – великою командою.

Ідентифікатор директиви #define може мати параметри, тоді вона працює як функція. Приклад використання директиви #define з параметрами та її переваги і недоліки буде подано в розділі 7 про функції.

Наявнiсть директив препроцесору в програмах необов’язкова.

Необхідно зазначити, що кожний конкретний компілятор може мати свої директиви та способи їх використання. Наприклад, у програмах деяких версій мови С++ ім’я файлу, як параметр директиви #include, пишеться без розширення h.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]