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

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


define

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

define [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +====== Определение констант с помощью #define ======
 +Оператор #define часто используют для определения символических констант. Он может появиться в любом месте исходного файла, а даваемое им определение имеет силу, начиная с места появления и до конца файла. 
 +<note>В конце определения символической константы (в конце оператора #define) точка с запятой не ставится!</note>
 +Пример 1.
 +<file>
 +# define min 1
 +# define max 100
 +</file>
 +В тексте программы вместо констант 1 и 100 можно использовать соответственно min и max. 
 +Пример 2. 
 +<file>
 +#include <iostream>
 +using namespace std;
 +#define NAME "Vasya Pupkin."
 +void main ()
 +{
 +    cout << " My name is " << NAME;
 +}
 +Результат работы: 
 +My name is Vasya Pupkin.
 +</file>
  
 +<note>Текст внутри строк, символьные константы и комментарии не подлежат замене, т.к. строки и символьные константы являются неделимыми лексемами языка C.
 +
 +Так что, после макроопределения #define YES 1
 + 
 +в операторе cout << "YES";
 + 
 +не будет сделано никакой макроподстановки.</note> 
 +Замены в тексте можно отменять с помощью команды: 
 +<file>
 +#undef <имя>
 +</file>
 +После выполнения такой директивы имя для препроцессора становится неопределенным и его можно определять повторно. Например, не вызовут предупреждающих сообщений директивы: 
 +<file>
 +#define M 16
 +#undef M
 +#define M 'C'
 +#undef M
 +#define M "C"
 +</file>
 +Директиву #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 · Последнее изменение: 2020/06/13 13:45 (внешнее изменение)