Категория
Информатика
Тип
статья
Страницы
3 стр.
Дата
19.07.2013
Формат файла
.doc — Microsoft Word
Архив
798450.zip — 8.38 kb
  • makrosy-v-c_798450_1.doc — 32.5 Kb
  • Readme_docus.me.txt — 125 Bytes
Оцените работу
Хорошо  или  Плохо



Текст работы

Вот такими макросы могут быть вполне:
#define Case break;case
#define nl <<"\n"
#define forever for(;;)
#define MIN(a,b) (((a)<(b))?(a):(b))
Вот совершенно ненужные макросы:
#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

      // ...
  }
}
Если вы вынуждены использовать макрос, при ссылке на глобальные имена используйте операцию разрешения области видимости ::
 и заключайте вхождения имени параметра макроса в скобки везде, где это возможно (см. MIN выше).

Обратите внимание на различие результатов расширения этих двух макросов:



Ваше мнение



CAPTCHA