Всем привет, столкнулся с непонятной проблемой в своем проекте, начал копаться и в итоге сузил до минимального варианта, в котором такая же проблема. Поэтому не буду весь первоначальный проект описывать, а суть такая (псевдо-пример с демонстрацией проблемы):
- объявляю высоту #define RECT_HEIGHT 50
- объявляю ширину #define RECT_WIDTH 100 + RECT_OFFSET
- здесь используется смещение #define RECT_OFFSET 10
В коде ищу периметр:
#define RECT_OFFSET 10 #define RECT_HEIGHT 50 #define RECT_WIDTH 100 + RECT_OFFSET // .......... int perimeter = RECT_HEIGHT * 2 + RECT_WIDTH * 2;
В результате в переменной вместо 320 получаю 220...
Привет, проблема со скобками, точнее с их отсутствием:
#define RECT_WIDTH (100 + RECT_OFFSET)
В твоем варианте в результате получается:
int perimeter = RECT_HEIGHT * 2 + 100 + RECT_OFFSET * 2;
Соответственно, результат 220.
@aveal понял... думал баг, а оказалась глупейшая ошибка )
@ransom бывает, строго говоря скобки лучше всегда ставить, как минимум на тот случай, когда в будущем кто-то будет работать с проектом, решит что-то добавить и, увидев скобки, будет застрахован от такой же ошибки:
#define RECT_HEIGHT (50)