Читайте также: |
|
Макросом или макроопределением называется идентификатор, связанный директивой #define с лексемой или последовательностью лексем. Макрос – это имя, которому директива #define задает некоторое значение. В тексте программы каждое вхождение имени заменяется заданным значением.
Определение макроса имеет вид: #define макрос значение (здесь макрос – это имя макроса, пробелы не допускаются)
Препроцессор заменяет макрос значением, связанным с ним директивой #define, всюду от точки его определения в программе до конца файла. Если макрос входит в состав символьной или строковой константы, то замена не производится.
Стандартом языка C++ предусмотрено несколько встроенных макросов.
Макрос | Описание |
__DATE__ __FILE__ __LINE__ __TIME__ | Строка, представляющая в форме mmm dd yyyy дату, когда данный файл обрабатывался препроцессором Строка, представляющая имя текущего файла Целое, равное номеру текущей строки исходного файла Строка, представляющая в форме hh:mm:ss время, когда данный файл обрабатывался препроцессором |
Кроме стандартных макросов системы программирования могут включать специфичные для них макроопределения. Так, в TC++ 3.0 определены 17 нестандартных макросов, изучить которые можно по системе помощи.
//Демонстрация работы директив препроцессора
#include <iostream.h>
#define greater_than(a,b) ((a) > (b)? 1: 0) /* greater_than(a,b): макрос с параметрами, проверяющий, больше ли первый аргумент второго. Аргументы в определении макроса следует заключать в скобки во избежание ошибок */
#define SMALL //SMALL - пустой макрос
void main()
{ int c = 5, d = 7;
if(greater_than(c, d))
cout << "\nc больше d";
else
cout << "\nc меньше d";
#undef greater_than //Отмена определения greater_than
#if defined (SMALL) //Использование операции defined
cout << "\nМакрос SMALL определен";
#else
cout << "\nМакрос SMALL не определен";
#endif
#undef SMALL //Отмена определения макроса SMALL
#ifdef SMALL //Использование директивы ifdef
cout << "\nМакрос SMALL определен";
#else
cout << "\nМакрос SMALL не определен";
#endif
#ifndef SMALL //Использование директивы ifndef
cout << "\nМакрос SMALL не определен";
#else
cout << "\nМакрос SMALL определен";
#endif
cout<<"\nИмя текущего файла "<<__FILE__;
cout<<"\nДата " << __DATE__; //Использование
cout<<"\nНомеp текущей строки "<<__LINE__; //встроенных
cout<<"\nВpемя "<<__TIME__; //макросов
}
В результате работы данной программы на экране появилось следующее:
c меньше d
Макрос SMALL определен
Макрос SMALL не определен
Макрос SMALL не определен
Имя текущего файла PREPROC.CPP
Дата Jul 01 2004
Номеp текущей строки 36
Вpемя 14:59:12
Дата добавления: 2015-07-08; просмотров: 221 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Препроцессор. Директивы препроцессора. | | | Указатели и адреса. Привести пример программы, использующей указатели. |