Определение констант с помощью #define.
Оператор #define часто используют для определения
символических констант. Он может появиться в любом месте исходного
файла, а даваемое им определение имеет силу, начиная с места появления и до
конца файла.
Примечание: В конце определения символической
константы (в конце оператора #define) точка с запятой не ставится!
Пример 1.
# define min 1
# define max 100
|
В тексте программы вместо констант 1 и 100 можно использовать соответственно
min и max.
Пример 2.
#include <iostream>
using namespace std;
#define NAME "Vasya Pupkin."
void main ()
{
cout << " My name is " << NAME;
}
Результат работы:
My name is Vasya Pupkin.
|
Примечание: Текст внутри строк, символьные
константы и комментарии не подлежат замене, т.к. строки и символьные константы
являются неделимыми лексемами языка C. Так что, после макроопределения
в операторе
не будет сделано
никакой макроподстановки.
Замены в тексте можно отменять с помощью команды:
После выполнения такой директивы имя для препроцессора становится
неопределенным и его можно определять повторно. Например, не вызовут
предупреждающих сообщений директивы:
#define M 16
#undef M
#define M 'C'
#undef M
#define M "C"
|
Директиву #undef удобно использовать при разработке больших
программ, когда они собираются из отдельных "кусков текста", написанных в разное
время или разными программистами. В этом случае могут встретиться одинаковые
обозначения разных объектов. Чтобы не изменять исходных файлов, включаемый текст
можно "обрамлять" подходящими директивами #define -
#undef и тем самым устранять возможные ошибки. Например:
. . . . .
A = 10; //Основной текст.
. . . . .
#define A X
. . . . .
A = 5; //Включенный текст.
. . . . .
#undef A
. . . . .
B = A; //Основной текст.
. . . . .
|
При выполнении программы B примет значение 10, несмотря на наличие
оператора присваивания A=5; во включенном тексте.
Если строка_лексем оказывается слишком длинной, то ее можно
продолжить в следующей строке текста программы. Для этого в конце продолжаемой
строки помещается символ "\". В ходе одной из стадий препроцессорной обработки
этот символ вместе с последующим символом конца строки будет удален из
программы. Например:
#define STROKA "\n Multum, non multa - \
mnogoe, no nemnogo!"
. . . . .
cout << STROKA;
. . . . .
На экран будет выведено:
Multum, non multa - mnogoe, no nemnogo!
|
Напоминаем вам, что с помощью директивы #define мы с вами также создавали
макросы, когда изучали встраивание в уроке номер девять. Рекомендуем Вам
вернуться к этому уроку и повторить пройденный материал.
|