608________________________________________________Глава 11

В Си++ отдается предпочтение использованию именованных переменных типа
const, а не символических констант. Константные переменные являются данными
определенного типа и их имена видны отладчику. А если используется символиче
екая константа, то после того, как символическая константа была заменена на со-
ответствующий текст, только этот текст и будет виден отладчику. Правда, недо.
статком переменных типа const является то, что им требуется память в объеме,
соответствующем их типу, для хранения своего значения, тогда как для символи-
ческих констант не требуется никакой дополнительной памяти.

Ниже приведены примеры определения с помощью директивы #define симво-
лических констант:

// определение строки текста:

ftdefine Anyk "Нажмите любую клавишу"

// идентификатор Delete в тексте просто удалится:

ftdefine Delete

// определение директивы #include:

#define GETSTD #include <stdio.h>

11.2.2.2 Макросы с параметрами

Формат директивы #define, определяющей макрос с параметрами:

ftdefine идентификатор_макроса(аргументы) замещающий_текст

Между идентификатором макроса и открывающейся скобкой не должно быть
пробела.

Вызов макроса осуществляется выражением:

идентификатор_макроса(аргументы)

Макрос, определяемый директивой препроцессора #define, это символическое
имя некоторых операций. Как и в случае символических констант, идентификатор
макроса заменяется на замещающий текст до начала компиляции программы. Но
сначала в замещающий текст подставляются значения параметров, а затем уже
этот расширенный макрос подставляется в текст вместо идентификатора макроса
и списка его параметров.

Например, следующий макрос с одним параметром определяет площадь кру-
га, воспринимая передаваемый в него параметр как радиус:

#define CIRC(x) (3.14159 * (х) * (х))

Везде в тексте файла, где появится идентификатор CIRC (А), значение
мента А будет использовано для замены х в замещающем тексте и этот расп:,.;. ••;:•
ный текст макроса будет использован для замещения. Например, оператор с мак
росом в тексте программы

S = CIRC(4) ;

примет вид:

S = (3.14159 * (4) * (4)) ;

Поскольку это выражение состоит только из констант, его значение будет!
числено во время компиляции и полученный результат будет присвоен перем
ной S во время выполнения программы.

Если вызов имеет вид

S = CIRC(a + Ь) ;

то после расширения макроса текст будет иметь вид:

S = (3.14159 * (а + b) * (а + Ь));