Оператор #define в C++ часто используют для определения символических констант. Он может появиться в любом месте исходного файла, а даваемое им определение имеет силу, начиная с места появления и до конца файла.
# define min 1 # define max 100
В тексте программы вместо констант 1 и 100 можно использовать соответственно min и max.
#include <iostream> using namespace std; #define NAME "Vasya Pupkin." void main () { cout << " My name is " << NAME; } Результат работы: My name is Vasya Pupkin.
Так что, после макроопределения #define YES 1
в операторе cout « "YES";
не будет сделано никакой макроподстановки.
Замены в тексте можно отменять с помощью команды:
#undef <имя>
После выполнения такой директивы имя для препроцессора становится неопределенным и его можно определять повторно. Например, не вызовут предупреждающих сообщений директивы:
#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 мы с вами также создавали макросы.