Различия

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


define [2025/07/06 12:38] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Определение констант с помощью #define ======
 +Оператор #define в [[zametki_po_jazyku_c|C++]] часто используют для определения символических констант. Он может появиться в любом месте исходного файла, а даваемое им определение имеет силу, начиная с места появления и до конца файла. 
 +<note>В конце определения символической константы (в конце оператора #define) точка с запятой не ставится!</note>
 +===== Пример 1 =====
 +
 +<file cpp>
 +# define min 1
 +# define max 100
 +</file>
 +В тексте программы вместо констант 1 и 100 можно использовать соответственно min и max. 
 +===== Пример 2 =====
 + 
 +<file cpp>
 +#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 мы с вами также создавали макросы.
 +===== Читайте также =====
 +  * Директивы [[preprocessor|препроцессора]]
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!