Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Макроси в З++

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Int xx = 0; // локальна переменная. Int xx = 0; // глобальний счетчик. INCR_xx; // збільшує локальний xx. Expanded = argument1: foo bar argument2: yuk yuk. Define mac (a, b) argument1: a argument2: b. После розширення дасть: После розширення дасть. Xx = SQUARE (xx+2); // xx = xx+2*xx+2. Define MIN (a, b) (((a)<(b))?(a):(b)). Expanded = mac (foo bar, yuk yuk). If (a-DISP==b) { // a-= 4==b. Define… Читати ще >

Макроси в З++ (реферат, курсова, диплом, контрольна)

Макросы в C++

Макросы в З вони важливі, але у З++ застосовуються набагато менше. Перше правило щодо них таке: не використовуйте їх, коли ви не зобов’язані це робити. Як зазначалося, кожен макрос виявляє свій недолік чи мові, чи програмі. Коли хочете використовувати макроси, прочитайте, будь ласка, спочатку дуже ретельно посібник з вашої реалізації З препроцесора.

Простой макрос визначається так:

#define name rest of line.

Когда name зустрічається як лексема, воно замінюється на rest of line.

Например:

named = name.

после розширення дасть:

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.

Макросы обробляють рядки — і про синтаксисі З++ знають обмаль, йдеться про типах З++ чи областях видимості - нічого. Компілятор бачить лише розширену форму макросу, тому помилка в макросе діагностується коли макрос розширено, а чи не що він визначено. Внаслідок цього виникають незрозумілі повідомлення помилки.

Вот такими макроси можуть цілком:

#define Case break;case.

#define nl << «n «.

#define forever for (;;).

#define MIN (a, b) (((a)<(b))?(a):(b)).

Вот зовсім непотрібні макроси:

#define PI 3.141 593.

#define BEGIN {.

#define END }.

А ось приклади небезпечних макросів:

#define SQUARE (a) a*a.

#define INCR_xx (xx)++.

#define DISP = 4.

Чтобы побачити, що вони небезпечні, спробуйте провести розширення наступному прикладі:

int xx = 0; // глобальний счетчик.

void f () {.

int xx = 0; // локальна переменная.

xx = SQUARE (xx+2); // xx = xx+2*xx+2.

INCR_xx; // збільшує локальний xx.

if (a-DISP==b) { // a-= 4==b.

// …

}.

}.

Если ви змушені використовувати макрос, при засланні на глобальні імена використовуйте операцію дозволу області видимості: і укладайте входження імені параметра макросу в дужки скрізь, де може бути (див. MIN вище).

Обратите увагу до відмінність результатів розширення цих двох макросів:

#define m1(a) something (a) // глибокодумний комментарий.

#define m2(a) something (a) /* глибокодумний коментар */.

например,.

int a = m1(1)+2;

int b = m2(1)+2;

pасширяется в.

int a = something (1) // глибокодумний комментарий+2;

int b = something (1) /* глибокодумний коментар */+2;

С допомогою макросів ви можете розробити свій власний мову. Найімовірніше, ж для решти він незбагненний. З іншого боку, З препроцесор — дуже проста макропроцесор. Коли ж ви спробуєте зробити щось нетривиальное, ви, мабуть, знайдете, що зробити це або неможливе, або надзвичайно складно.

Список литературы

Для підготовки даної роботи було використані матеріали із сайту internet.

Показати весь текст
Заповнити форму поточною роботою