Top.Mail.Ru
Уведомления
Очистить все

[Решено] Проблема с директивами define.

(@ransom)
Level 1

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

  • объявляю высоту #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...

Цитата
Создатель темы Размещено : 26.08.2024 10:47
Aveal
(@aveal)
Top level Admin

Привет, проблема со скобками, точнее с их отсутствием:

#define RECT_WIDTH    (100 + RECT_OFFSET)

В твоем варианте в результате получается:

int perimeter = RECT_HEIGHT * 2 + 100 + RECT_OFFSET * 2;

Соответственно, результат 220.

ОтветитьЦитата
Размещено : 26.08.2024 12:27
(@ransom)
Level 1

@aveal понял... думал баг, а оказалась глупейшая ошибка )

ОтветитьЦитата
Создатель темы Размещено : 26.08.2024 16:48
Aveal
(@aveal)
Top level Admin

@ransom бывает, строго говоря скобки лучше всегда ставить, как минимум на тот случай, когда в будущем кто-то будет работать с проектом, решит что-то добавить и, увидев скобки, будет застрахован от такой же ошибки:

#define RECT_HEIGHT   (50)
ОтветитьЦитата
Размещено : 27.08.2024 10:54
(@ransom)
Level 1

@aveal хороший совет) спасибо за помощь!

ОтветитьЦитата
Создатель темы Размещено : 28.08.2024 18:41
Поделиться: