На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » И2Р Программы » Программирование » C, C++

Макросы в C++

Макросы - это препроцессорные "функции" , т.е. лексемы, созданные с помощью директивы #define, которые принимают параметры подобно функциям. После директивы #define указывается имя макроса, за которым в скобках (без пробелов) параметры, отделенные запятыми и определение макроса, отделенное пробелом.

Например:
#define ADD(x,y) x = x + y
если после этого написать:
int a=2;
int b=3;
ADD(a,b);
cout<<"a= "<<a<<" b= "<<b;

то получим:
a=5 b=3

Параметры макросов лучше писать в скобках, хотя это не обязательно, но иногда отсутствие скобок приводит к неожиданным результатам. Вот пример, надеюсь все ясно, объяснять ничего не буду.
#define MACRO1(x) x * x
#define MACRO2(x) ( x ) * ( x )
int a =2;
int b=3;
cout<<"macro 1- " <<MACRO1(a+b);
cout<<"\nmacro 2- "<<MACRO2(a+b);

результат:
macro 1- 11
macro 2- 25


В первом случае получили 2+3*2+3, то есть 2+6+3=11, а во втором (2+3)*(2+3), т.е. 5*5=25.

Для управления строками в макросах сучествует 2 оператора - оператор взятия в кавычки(#) и оператор контактенации (##). Оператор # берет в кавычки следуючие за ним символы до очередного пробела, например, если объявить так:
#define PRINT(x) cout<< #x
то
PRINT( a string ); равносильно cout<<" a string ";

Оператор ## используется для контактенации строк, то есть "склеивания" нескольких строк в одну. Например, у вас есть несколько функций с именами MyFirstFunction(), MySecondFunction(), MyThirdFunction() и т.д. Для их вызова можно определить макрос:
#define CALLFUNC(x) My##x##Function()
и вызывать функции MyFirstFunction(), MySecondFunction() ,MyThirdFunction() и т.д. макросом CALLFUNC
CALLFUNC(First);
CALLFUNC(Second);

и т.д.

У многих компиляторов есть ряд встроенных макросов. Наиболее распостраненные - __DATE__ , __TIME__ , __LINE__ , __FILE__ , которые заменяются текущей (на время компиляции) датой, временем, номером строки и именем исходного файла соответственно. Встроенные макросы можно использовать без объявления. Пример:
cout<<"Compiled on "<<__DATE__<<" "<<__TIME__ ;
Результат:
compiled on Sep 52001 23:49:55

А. Согомонян
Азбука Технологий Программирования

Другие разделы
C, C++
Java
PHP
VBasic, VBS
Delphi и Pascal
Новое в разделе
Базы данных
Общие вопросы
Теория программирования и алгоритмы
JavaScript и DHTML
Perl
Python
Active Server Pages
Программирование под Windows
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100