Лекція 12. Директиви препроцесора

Сайт: Навчально-інформаційний портал НУБіП України
Курс: Основи програмування
Книга: Лекція 12. Директиви препроцесора
Надруковано: Гість-користувач
Дата: неділя, 15 лютого 2026, 19:42

1. Директива #define

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

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

Директива #define.

Має дві форми:

# define ім'я текст_підстановки,

# define ім'я (список параметрів) текст_підстановки.

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

Для директиви #define з параметрами можна використовувати дві препроцесорні операції: 

1. Операцію створення рядка, який відбивається одним знаком #,

2. Операцію об'єднання імен, яка відображається ##.

Якщо перед формальним параметром розміщений символ #, то в результаті підстановки на цім місці буде розміщений аргумент у подвійних лапках.

2. Директиви умовної компіляції

Це директиви #if, #elif, #else, #endif, які дозволяють не компілювати окремі частини вихідного файлу після перевірки константних виразів. Програма з директивами умовної компіляції має вигляд:

#if константний вираз [текст програми]

#elif константний вираз [текст програми]

................................. #else

[текст програми] #endif

Уумовно компілюємий текст програми починається директивою #if і закінчується обов'язково директивою #endif.

Між цими директивами можуть бути розміщено кілька директив #elif (це else - if) і одна директива #else.

Константні вираження НЕ можуть містити операції sizeof, перетворення типу й констант перерахування.

Умовну компіляцію можна застосувати для програм, призначених для використання на різних ЕОМ та в різних ОС.

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

3. Директиви компілятора або прагми

Це інструкції компіляторові, які розміщаються в певних місцях програми й використовуються для керування діями компілятора, не впливаючи на програму в цілому. Формат директиви:

#pragma <последовательность символов>

 Основні директиви:

#pragma check_pointer ([on/off]) встановлює контроль покажчиків або знімає для певної функції;

#pragma check_stack ([on/off]) - встановлює або забороняє контроль переповнення стеку; 

#pragma loop_opt ([on/off]) - знімає або встановлює оптимізацію циклів окремих функцій; 

#pragma message (рядок повідомлень) – посилає рядок повідомлення в stdout без припинення компіляції;

#pragma pack ([1/2/4]) – для певних структур змінює спосіб упакування елементів;

#pragma same_seg (змінна1, змінна2...) - усі наведені змінні розподіляються в тому самому сегменті даних.

Конкретний перелік наявних директив залежить від транслятора. Компілятор інтегрованої системи ВС сприймає наступну директиву: check_pointer, check_stack, message, pack.

Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання

Вирівнювання тексту Вирівнювання тексту

Ширина абзацу Ширина абзацу

0