М Акрос в C вони дуже важливі, але в C ++ застосовуються набагато менше. Перше правило щодо них таке: не використовуйте їх, якщо ви не зобов'язані це робити. Як було відмічено, майже кожен макрос проявляє своя вада або в мові, або в програмі. Якщо ви хочете використовувати макроси, прочитайте, будь ласка, спочатку дуже уважно керівництво по вашій реалізації C препроцесора.
П зростання макрос визначається так:
#define name rest of line
До оли name зустрічається як лексема, воно замінюється на rest of line.
після розширення дасть:
named = rest of line
М ожно також визначити макрос з параметрами.
#define mac (a, b) argument1: a argument2: b
П ри використанні mac має даватися два рядки параметра. Після розширення mac () вони замінюють a і b.
expanded = mac (foo bar, yuk yuk)
після розширення дасть
expanded = argument1: foo bar argument2: yuk yuk
М Акрос обробляють рядки і про синтаксис C ++ знають дуже мало, а про типи C ++ або областях видимості - нічого. Компілятор бачить тільки розширену форму макросу, тому помилка в макросі діагностується коли макрос розширено, а не коли він визначений. В результаті цього виникають незрозумілі повідомлення про помилки.
У від такими макроси можуть бути цілком:
#define Case break; case
#define nl <<"\\n"
#define forever for (;;)
#define MIN (a, b) (((a)<(b))?(a):(b))
У від абсолютно непотрібні макроси:
#define PI 3.141593
#define BEGIN #define END>
А ось приклади небезпечних макросів:
#define SQUARE (a) a * a
#define INCR_xx (xx) ++
#define DISP = 4
Ч об побачити, чим вони небезпечні, спробуйте провести розширення в наступному прикладі:
Е слі ви змушені використовувати макрос, при посиланні на глобальні імена використовуйте операцію дозволу області видимості. і укладайте входження імені параметра макросу в дужки скрізь, де це можливо (див. MIN вище).
Про братів увагу на відмінність результатів розширення цих двох макросів:
int a = m1 (1) +2;
int b = m2 (1) +2;
За допомогою макросів ви можете розробити свою власну мову. Швидше за все, для всіх інших він буде незбагненний. Крім того, C препроцесор - дуже простий макропроцесор. Коли ви спробуєте зробити що-небудь нетривіальне, ви, ймовірно, виявите, що зробити це або неможливо, або надзвичайно важко.