Может кому пригодится. Сегодня задали интересный вопрос по препроцессору компилятора: почему неправильно считается формула, заданная несколькими #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/
Улыбнуло! =D
сенкс, инфо очень пригодилась
Буду учитывать в своей работе, спасибо