Язык программирования C++ для профессионалов


Макросредства - часть 2


#define Case break;case #define forever for(;;)

А вот совершенно излишние макроопределения:

#define PI 3.141593 #define BEGIN { #define END }

Следующие макроопределения могут привести к ошибкам:

#define SQUARE(a) a*a #define INCR_xx (xx)++ #define DISP = 4

Чтобы убедиться в этом, достаточно попробовать сделать подстановку в таком примере:

int xx = 0;// глобальный счетчик

void f() { int xx = 0;// локальная переменная xx = SQUARE(xx+2); // xx = xx +2*xx+2; INCR_xx;// увеличивается локальная переменная xx if (a-DISP==b) { // a-=4==b // ... } }

При ссылке на глобальные имена в макроопределении используйте операцию разрешения области видимости, и всюду, где это возможно, заключайте имя параметра макроопределения в скобки. Например:

#define MIN(a,b) (((a)<(b))?(a):(b))

Если макроопределение достаточно сложное, и требуется комментарий к нему, то разумнее написать комментарий вида /* */, поскольку в реализации С++ может использоваться препроцессор С, который не распознает комментарии вида //. Например:

#define m2(a) something(a) /* глубокомысленный комментарий */

С помощью макросредств можно создать свой собственный язык, правда, скорее всего, он будет непонятен другим. Кроме того, препроцессор С предоставляет довольно слабые макросредства. Если ваша задача нетривиальна, вы, скорее всего, обнаружите, что решить ее с помощью этих средств либо невозможно, либо чрезвычайно трудно. В качестве альтернативы традиционному использованию макросредств в язык введены конструкции const, inline и шаблоны типов. Например:

const int answer = 42; template<class T> inline T min(T a, T b) { return (a<b)?a:b; }

on_load_lecture()

Перейти к вопросам »

  Если Вы заметили ошибку - сообщите нам.  

Страницы:

« |

1

|

2

|

3

|

4

|

5

|

6

|

7

|

8

|

9

|

вопросы | »

|

учебники

|

для печати и PDA


Курсы | Учебные программы | Учебники | Новости | Форум | Помощь



Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

© 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование




Начало  Назад  Вперед



Книжный магазин