k155la3 26 15 апреля, 2017 Опубликовано 15 апреля, 2017 (изменено) · Жалоба Есть конструкция вида if( AAA ) if( BBB) Var1 = f1(...); else Var1 = f2(...); Код работает правильно, как и ожидается. Но IAR выдает предупреждение касаемо сомнительности принадлежности else к первому или второму if. (?) Это "бдение" компилятора / подсказка разработчику на возможную логическую ошибку или в принципе неправильное/неграмотное построение конструкции на if ? (надо использовать { . . . }) Изменено 15 апреля, 2017 пользователем k155la3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба Это "бдение" компилятора / подсказка разработчику на возможную логическую ошибкуДа. Иногда оказывается полезным (if(a = 2) вместо if(a == 2)). gcc иногда даже на форматирование внимание обращает, вот на такой код может предупреждение выдать: if(...) expression 1; expression 2; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба Да. ..... Спасибо за инф. Своим коллегам часто повторяю "компилятор умнее нас" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба Это именно предупреждение, иначе была бы ошибка. Я лично никогда не видел, чтобы компилятор обращал внимание на форматирование, всегда думал, что он сначала все переводит в одну длинную строку. A тут считается что возможна ошибка, поскольку программисты частенько выделяют логику форматированием, а про скобки забывают. if( AAA ) { if( BBB) Var1 = f1(...); else Var1 = f2(...); } if( AAA ) { if( BBB) Var1 = f1(...); } else Var1 = f2(...); Первый вариант равнозначен вашему, а второй отличается. Скобки лучше ставить явно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться