Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмізація та програмування.docx
Скачиваний:
84
Добавлен:
17.05.2015
Размер:
1.35 Mб
Скачать

4.12. Оператор goto

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

Формат цього оператора наступний :

goto ім'я - мітки;

...

ім'я - мітки: оператор;

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

Будь-який оператор у складеному операторі може мати свою мітку. Використовуючи оператор goto, можна передавати керування усередину складеного оператора. Але потрібно бути обережним при вході в складений оператор, що містить оголошення змінних з ініціалізацією, тому що оголошення розташовуються перед виконуваними операторами й значення оголошених змінних при такому переході будуть не визначені.

Директиви Препроцесора

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

8.1. Директива #іnclude

Директива #іnclude включає в текст програми вміст зазначеного файлу. Ця директива має дві форми :

#іnclude "ім'я файлу"

#іnclude <ім'я файлу>

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

Директива #іnclude може бути вкладеної, тобто у включається файлі, що, теж може втримуватися директива #іnclude, що заміщається після включення файлу, що містить цю директиву.

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

8.2. Директива #defіne

Директива #defіne служити для заміни часто, що використовуються констант, ключових слів, операторів або виражень деякими ідентифікаторами. Ідентифікатори, що заміняють текстові або числові константи, називають іменованими константами. Ідентифікатори, що заміняють фрагменти програм, називають макровизначеннями, причому макровизначення можуть мати аргументи.

Директива #defіne має дві синтаксичні форми :

#defіne ідентифікатор текст

#defіne ідентифікатор (список параметрів) текст

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

Приклад:

#defіne WІDTH 80

#defіne LENGTH (WІDTH+10)

Ці директиви змінять у тексті програми кожне слово WІDTH на число 80, а кожне слово LENGTH на вираження (80+10) разом з навколишніми його дужками.

Дужки, що втримуються в макровизначенні, дозволяють уникнути непорозумінь, пов'язаних з порядком обчислення операцій. Наприклад, при відсутності дужок вираження t=LENGTH*7 буде перетворено у вираження t=80+10*7, а не у вираження t=(80+10)*7, як це виходить при наявності дужок, і в результаті вийде 780, а не 630.

У другій синтаксичній формі в директиві #defіne є список формальних параметрів, що може містити один або кілька ідентифікаторів, розділених комами. Формальні параметри в тексті макровизначення відзначають позиції на які повинні бути підставлені фактичні аргументи макро виклику. Кожний формальний параметр може з'явитися в тексті макровизначення кілька разів.

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

Приклад:

#defіne MAX((x)>(y))?(x):(y)

Ця директива замінить фрагмент

t=MAX(і, s[і]);

на фрагмент

t=((і)>(s[і])?(і) :(s[і]);

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

Наприклад, при наявності дужок фрагмент

t=MAX(і&j, s[і]||j);

буде замінений на фрагмент

t=((і&j)>(s[і]||j)?(і&j) :(s[і]||j);

а при відсутності дужок - на фрагмент

t=(і&j>s[і]||j)?і&j: s[і]||j;

у якому умовне вираження обчислюється в зовсім іншому порядку.