-
- А если так: return (2<1?1:0); или так: return ((2<1)?(1):(0)); - ЫЫyкпy(02.11.2025 10:02)
- Т.е. он пишет это предупреждение и в реальном коде, а не только этом неправильном примере? А в тернарном (a<b)?(c):(d), в ситуации, когда и a, и b - дефайны какие-то или константы, то можно же вообще туда #if'ы засунуть... - Eddy_Em(01.11.2025 21:56)
- А разве константное значение не вычисляется на этапе компиляции? - reZident(01.11.2025 21:24)
- #pragma clang diagnostic ignored "-Wunreachable-code" ? - SciFi(01.11.2025 21:22)
- Так можно, но это не красиво, код портится лишними строчками - AlexBi(01.11.2025 21:44)
- Со скобками - никак. Похоже, что значение условия вычисляется на
этапе компиляции. Перенесите условие в оператор препроцессора #IF
#ELSE #ENDIF. - Nikolay_Po(01.11.2025 21:11)
- Это упрощенный пример. У меня на основе подобных выражений
вычисляется индекс в массиве, делается это в разных местах, с
разными константными данными, на #if #else такое не заменится. Но
если скобками такое не погасить, значит буду выкручиваться
по-другому. Я думал что я просто не могу подобрать нужную
комбинацию скобок. - AlexBi(01.11.2025 21:19)
- Я думаю, у вас просто слишком жёсткий уровень предупреждений. Сам пользуюсь GCC. И если включить оптимизации на максимум и включить все основные предупреждения - то тоже жалуется, что, дескать, чего условие писал, если результат заранее известен? Nikolay_Po(311 знак., 01.11.2025 21:44)
- Так константы в примере! Часть кода приницпиально не будет
использована. О чем предупреждение и говорит. - POV(01.11.2025 21:23)
- Оно так и надо. Если подобное встречается в if то предупреждение
гасится скобками. А тут ни как скобки не удается подобрать AlexBi(1 знак., 01.11.2025 21:43, картинка)
- Какая проблема переписать на if? Тоже так делал с GCC. Правда, не
помню, почему. Что-то похожее, но немного не тот случай... - Nikolay_Po(01.11.2025 21:45)
- Опишу как у меня возникла потребность в таком выражении AlexBi(542 знак., 02.11.2025 08:52)
- Ещё варианты: 1) сделать LUT, 2) в Си есть constexpr, в C++ - ещё и
consteval. 3) фиксировать индексы жестко. В случае изменения
каналов при переразводке ПП перенастроите порядок опроса каналов,
индексы при обращении останутся прежние. Apaмчик(1 знак., 03.11.2025 06:44,
, ссылка) - Завязывайте с программировпнием на макросах! Напишите нормальную функцию. Её результат с константными данными вычислится на этапе компиляции. А лучше переходите на ЯП где это всё предусмотпено штатно. - VladislavS.(02.11.2025 23:53)
- А если заменить a>b?1:0 на (a>b)? - SciFi(02.11.2025 09:37)
- Ещё варианты: 1) сделать LUT, 2) в Си есть constexpr, в C++ - ещё и
consteval. 3) фиксировать индексы жестко. В случае изменения
каналов при переразводке ПП перенастроите порядок опроса каналов,
индексы при обращении останутся прежние. Apaмчик(1 знак., 03.11.2025 06:44,
- Опишу как у меня возникла потребность в таком выражении AlexBi(542 знак., 02.11.2025 08:52)
- Какая проблема переписать на if? Тоже так делал с GCC. Правда, не
помню, почему. Что-то похожее, но немного не тот случай... - Nikolay_Po(01.11.2025 21:45)
- Оно так и надо. Если подобное встречается в if то предупреждение
гасится скобками. А тут ни как скобки не удается подобрать AlexBi(1 знак., 01.11.2025 21:43, картинка)
- Это упрощенный пример. У меня на основе подобных выражений
вычисляется индекс в массиве, делается это в разных местах, с
разными константными данными, на #if #else такое не заменится. Но
если скобками такое не погасить, значит буду выкручиваться
по-другому. Я думал что я просто не могу подобрать нужную
комбинацию скобок. - AlexBi(01.11.2025 21:19)
