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

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


define

Различия

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

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

define [2010/10/18 17:17] (текущий)
Строка 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 · Последние изменения: 2010/10/18 17:17 (внешнее изменение)