Розділ ІІІ. МОВИ ПРОГРАМУВАННЯ С ТА С++
Наприклад: #еrrоr TEST ERROR
Коли зустрічається директива #error, то виводиться повідомлення про помилку.
Директива #lіne змінює вміст __LІNE__ та __FІLE__, які є зарезер- вованими ідентифікаторами в компіляторі. У першому зберігається номер рядка коду, що компілюється в даний момент. Другий іденти- фікатор – це рядок, що містить ім'я вихідного файла, який компілю- ється. Директива #lіne має вигляд:
#lіne <номер> <"ім'я-файла">,
де номер – додатне ціле число, що стає новим значенням __LІNE__, а необов'язкове ім'я-файла – будь-який припустимий ідентифікатор файла, що стає новим значенням __FІLE__.
Директива #pragma – це обумовлена реалізацією директива, що до- зволяє передавати компілятору різні інструкції. Її можливості зазна- чаються в документації для компілятора.
*Література для CР: препроцесор – [55, 102, 132, 133].
Контрольні запитання та вправи
1.Що таке препроцесор?
2.Що таке директива препроцесора?
3.Що таке простий макрос?
4.Що таке параметризований макрос?
5.Як викликається параметризований макрос?
6.Для чого використовуються макроси? Навести приклади за- стосування макросів.
7.Пояснити різницю між функцією й параметризованим мак- росом.
8.Що таке умовна компіляція?
9.Описати директиви умовної компіляції.
10.Описати операції перетворення в рядок # та конкатенації
##.Навести власні приклади їх застосування.
11.Як діють директиви #line, #error та #pragma?
12.Порівняти значення викликів стандартної функції sqr і ма-
кросу #define sqr(X) ((X)*(X)) на аргументі a++, а та-
кож значення змінної а після цих викликів. Пояснити розбі- жності в значеннях.
13.Написати макрос tree_node (data_type) для опису струк-
тури вузла бінарного дерева, в якому тип вершини задається параметром data_type.