реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> if-if-else, Корректна ли структура кода. IAR
k155la3
сообщение Apr 15 2017, 10:12
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 592
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Есть конструкция вида
Код
if( AAA )
   if( BBB)
       Var1 = f1(...);
   else
       Var1 = f2(...);

Код работает правильно, как и ожидается.

Но IAR выдает предупреждение касаемо сомнительности принадлежности else
к первому или второму if.

(?) Это "бдение" компилятора / подсказка разработчику на возможную логическую ошибку
или в принципе неправильное/неграмотное построение конструкции на if ?
(надо использовать { . . . })

Сообщение отредактировал k155la3 - Apr 15 2017, 10:14
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 15 2017, 10:25
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 034
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (k155la3 @ Apr 15 2017, 13:12) *
Это "бдение" компилятора / подсказка разработчику на возможную логическую ошибку
Да. Иногда оказывается полезным (if(a = 2) вместо if(a == 2)). gcc иногда даже на форматирование внимание обращает, вот на такой код может предупреждение выдать:
CODE
if(...)
    expression 1;
    expression 2;



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 15 2017, 11:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 592
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Сергей Борщ @ Apr 15 2017, 13:25) *
Да. .....

Спасибо за инф.
Своим коллегам часто повторяю "компилятор умнее нас" sm.gif

Go to the top of the page
 
+Quote Post
Baser
сообщение Apr 15 2017, 13:12
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 278
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Это именно предупреждение, иначе была бы ошибка.
Я лично никогда не видел, чтобы компилятор обращал внимание на форматирование,
всегда думал, что он сначала все переводит в одну длинную строку.
A тут считается что возможна ошибка, поскольку программисты частенько выделяют логику форматированием, а про скобки забывают.

Код
if( AAA ) {
   if( BBB)
       Var1 = f1(...);
   else
       Var1 = f2(...); }

Код
if( AAA ) {
   if( BBB)
       Var1 = f1(...); }
   else
       Var1 = f2(...);

Первый вариант равнозначен вашему, а второй отличается.
Скобки лучше ставить явно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th September 2017 - 07:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016