Обработка директивы define препроцессором

Может кому пригодится. Сегодня задали интересный вопрос по препроцессору компилятора: почему неправильно считается формула, заданная несколькими #define ?




В качестве примера привели такой код:

#define a 20
#define b 10
#define c a+b
#define d a-b
#define e c-d

При выполнении программы переменная e оказывалась равна 0, а не ожидаемому 20. А ларчик просто открывается: препроцессор решает задачу «в лоб», просто последовательно раскрывая define’ы
c-d = a+b-a-d = 20+10-20-10 = 0
Что на вход получит компилятор «0» или «20+10-20-10» — зависит от препроцессора, но, самое главное, чтобы избежать подобных проблем при описании формул в define’ах возьмите за правило всегда заключать переменные в скобки.

Корректный код примера:

#define a 20
#define b 10
#define c (a)+(b)
#define d (a)-(b)
#define e (c)-(d)

Теперь e будет иметь «нужное» значение 20. Скобки в описании c и d — перестраховка на будущее.

http://vorchun.ru/kompyutery/obrabotka-direktivy-define-preprocessorom/

3 responses to “Обработка директивы define препроцессором

  1. Улыбнуло! =D

  2. сенкс, инфо очень пригодилась

  3. Буду учитывать в своей работе, спасибо

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *