ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Суббота
25 июня
1035633 Топик полностью
il-2 (12.09.2020 08:59, просмотров: 461) ответил Aleksey_75 на Если кто-то мне еще раз скажет что я должен знать приоритет операций вместо того чтоб ставить скобки! Я буду бить сильно, больно и скорее всего ногами!!
А я буду держать!!! Меня тоже из-за скобок только сейчас отпустило. Я как соколиный глаз из того анекдота - на третий день заметил, что у сарая нет стены: 

У нас в одном проекте для компиляции разных релизов (разные модели устройства) используется такой механизм:

// Список поддерживаемых фич
#define RELEASE_CAPS_1 0x0001
#define RELEASE_CAPS_2 0x0002
#define RELEASE_CAPS_3 0x0004
...

// Список релизов (моделей устройства)
#define RELEASE_MODEL_1 (RELEASE_CAPS_1 | RELEASE_CAPS_3)
#define RELEASE_MODEL_2 (RELEASE_CAPS_2 | RELEASE_CAPS_3)
#define RELEASE_MODEL_3 (RELEASE_CAPS_3)
#define RELEASE_MODEL_4 RELEASE_CAPS_1 | RELEASE_CAPS_2// !!! А вот здесь один нехороший человек не поставил скобки !!!

...

// Выбор релиза (модели устройства) для компиляции
#define RELEASE_DESTINATION RELEASE_MODEL_4 


Затем - везде и повсеместно в проекте используется для проверки поддержки фич такая конструкция:


#if ( RELEASE_DESTINATION & RELEASE_CAPS_1 )
// Код для реализации фичи
#endif

Или так:

int block_sz = 10 + (( RELEASE_DESTINATION & RELEASE_CAPS_1 )? 6:0) + (( RELEASE_DESTINATION & RELEASE_CAPS_2 )? 2:0) ...

И еще бог знает как...


А теперь вопрос на сообразительность (ЗЫ: отредактировал):

Чему будет равно выражение ( RELEASE_DESTINATION & RELEASE_CAPS_3 ) для приведенного выше примера? По замыслу должно быть FALSE(0), а на самом деле TRUE(!=0).

Почему? :-)