Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

define

Определение констант с помощью #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 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 мы с вами также создавали макросы.




define.txt · Последние изменения: 2010/10/18 17:17 (внешнее изменение)