Директиви препроцесору

Використання директив препроцесору (таких як: #include), обов’язково у програмі. Усі директиви починаються зі знаку п, котрому в рядку може передувати тільки пробіли. Після директиви знак; не ставиться. Розглянемо найуживаніші директиви.

• #define – директива, що вказує на заміну ідентифікатора у програмі числовою або текстовою константою. Коли ідентифікатор замінюється деякою послідовністю дій, він має назву макрос (макровизначення)..

Обов’язковою умовою є існування усіх учасників заміни у вигляді окремих лексем.

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

• ## - визначає операцію, яка здійснює “склейку” лексем. Наприклад, #define SS(x, y) при виклику SS(a, 5) утворює ідентифікатор а5.

• # - визначає операцію, що перетворює підставлену лексему у символьний рядок. Використовується тільки у макросі з аргументом. Приклад, директива # define HELLO(x) cout<<“Привіт, “ #x

у тексті програми підставити замість HELLO (приятель) рядок

cout<<“Привіт, “ “приятель”

Рядок, що розділений пробілом, при попередній обробці “склеюється”, і в результаті отримуємо: cout<<“Привіт, приятель”;

• # undef - директива, яка відміняє дію поточного визначення # define. Структура директиви має вигляд: # undef пробіл ідентифікатор

Таким чином, область дії символьної константи або макросу починається від місту їх визначення # define та закінчується містом відміни # undef

• # include – директива, що включає у програму файли:

# include пробіл <ім’я файлу>

# include пробіл “ім’я файлу”

Ці директиви можуть бути вкладеними, і ця її властивість багатократно використовувалась при форматуванні бібліотеці програміста.

Директиви препроцесору організують режими умовної компіляції.

• вже відоме сполучення директив:

#ifndef WORD

# define WORD

…………………

#endif

виключають повторне включення файлів.

Аналогічно можна виключити повторне визначення констант:

#ifndef e

#definef e 2.71828

#endif

Ifndef – скорочений запис виразу if!define (коли не визначено).

• для перевизначення констант можна використовувати набір директив:

#ifdef e

#undef e

#definef e 1828

#endif

Ifdef – скорочений запис виразу if defined (коли визначено). Кожна директива #if повинна супроводжуватися своєю #endif.

Операції приведення типів, sizeof та константи enum не повинні приймати участь у виразах, обчислюваних у директивах препроцесору.

• Набір директив може виключити фрагмент програми із процесу компіляції.

# if 0

Фрагмент програми, що виключається

#endif

Для включення фрагмента у процес компіляції достатньо змінити 0 на 1.

Можна використовувати варіант:

#ifdef DB

Фрагмент програми, що виключається

#endif

Коли константа DB визначена, текст між директивами включається у процес компіляції, а коли не визначена – виключається.

Обробка програми препроцесором здійснюється до компіляції. Виконуються усі підстановки, а рядки, що містять #define та #undef, замінюються і стають порожніми. На місце рядків # include підставляється вміст файлу, що включається. Виконується обробка директив умовної компіляції, а рядки, їх вміст, замінюються порожніми. Порожніми замінюються також рядки, вміст яких виключається у процесі умовної компіляції.

Оглядові запитання

1. Що робить операцію розмітки, коли її застосувати до заповненої бази даних?

2. Чи використання директив препроцесору (таких як: #include), обов’язково у програмі?

3. Після директиви знак; ставиться чи ні?

4. Чим відрізняється функціонально макрос від вбудованій функції?

5. Чи приймають участь у виразах, обчислюваних у директивах препроцесору, операції приведення типів, sizeof та константи enum?

6. Що достатньо змінити для включення фрагмента у процес компіляції?

7. Коли здійснюється обробка програми препроцесором?



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: