Макроси, функції і файли, статті, програмування - програмування c, delphi, c #

М Акрос в 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 препроцесор - дуже простий макропроцесор. Коли ви спробуєте зробити що-небудь нетривіальне, ви, ймовірно, виявите, що зробити це або неможливо, або надзвичайно важко.