-
- Не видал. В больших проектах исправление варнингов -- проблема. И
даже профи говнокодят очень даже запросто. И лучше разобраться с
предупреждениями от анализатора (час на одно), чем разгребать
трудноуловимые баги (по неделе на один). В данном же случае то ли с
integral promotion в компиляторе проблемы (или специально
отключено), или анализатор действительно глючный. Я всегда был о
IAR невысокого мнения... Из бесплатных можно пользоваться
clang-tidy или clang-analizer fk0(13 знак., 11.01.2021 22:53)
- А причина возникновения варнинга следующая... Анализатор не плодит
дополнительных сущностей. Из строки "if(Kolvo>MaxRegTX ||
Kolvo==0) return;" он выясняет Kolvo[1,32], а из строки "if((Adres+Kolvo)>MaxReg)
return;" он выясняет Adres[0,15], принимая Kolvo наихудшим случаем. Потом когда доходит до цикла, он
считает индекс массива 32+15-1=46. И выкидывает варнинг. Поправьте если не прав. - IBAH(12.01.2021 15:08 - 21:33)
- А может и не так. Адрес получается извне и он шорт, и может быть например 65510. И тогда if проскочит. - Бopиc2(13.01.2021 12:17, )
- собственно вот это я и хотел сказать. (я про 31+15=46), но как то
не слишком явно выразился. - Zoro(12.01.2021 15:39 - 22:26)
- Я в арифметике ошибся, никто не заметил... - IBAH(12.01.2021 21:35)
- А зачем символ ; в конце строки с for? - picarmer(13.01.2021 00:54)
- Ещё один довод в пользу анализаторов: приличный бы ругнулся. А у
нас никто несколько дней не замечал. - fk0(13.01.2021 11:56)
- Не пройдёт компиляцию. Там пример кода весь покорёженный. Наверняка
это результат редактирования, возможно, в пылу борьбы с сахаровским
редактором постов. - SciFi(13.01.2021 12:10)
- Именно "в пылу борьбы". Кнопка "</>" глючит по взрослому ! Вставить код получается с нескольких попыток. (У меня Хром, Вин7) - IBAH(13.01.2021 14:57)
- Точка с запятой в конце for/while и оператор или блок кода под
таким for -- типовая ошибка. И анализаторы умеют предупреждать,
даже по-моему gcc warning даёт. Раньше не давал и я помню тоже с
таким багом долго сражался и долго смеялся после. В хорошем
анализаторе код не просто проверяется буквально, согласно
формальной грамматике, но и проверяются возможные человеческие
ошибки такого рода. Например будет ругаться на неправильную
"индентацию", т.к. потенциально это значит fk0(31 знак., 13.01.2021 12:16)
- ну да. вот еслиб { стояла в той же строке что и for - одной ошибкой
было бы меньше - Zoro(13.01.2021 23:35)
- Спасибо! Хороший аргумент за компактное форматирование против раздутого. - fk0(14.01.2021 00:41)
- ну да. вот еслиб { стояла в той же строке что и for - одной ошибкой
было бы меньше - Zoro(13.01.2021 23:35)
- Не пройдёт компиляцию. Там пример кода весь покорёженный. Наверняка
это результат редактирования, возможно, в пылу борьбы с сахаровским
редактором постов. - SciFi(13.01.2021 12:10)
- Ещё один довод в пользу анализаторов: приличный бы ругнулся. А у
нас никто несколько дней не замечал. - fk0(13.01.2021 11:56)
- Вот для таких случаев и нужен статический анализатор. - fk0(12.01.2021 21:46)
- А зачем символ ; в конце строки с for? - picarmer(13.01.2021 00:54)
- Я в арифметике ошибся, никто не заметил... - IBAH(12.01.2021 21:35)
- Вроде бы логично. - SciFi(12.01.2021 15:18)
- Может я не умнее анализатора, но не понимаю как как расширение до int может тут повлиять. IBAH(266 знак., 12.01.2021 14:57)
- А причина возникновения варнинга следующая... Анализатор не плодит
дополнительных сущностей. Из строки "if(Kolvo>MaxRegTX ||
Kolvo==0) return;" он выясняет Kolvo[1,32], а из строки "if((Adres+Kolvo)>MaxReg)
return;" он выясняет Adres[0,15], принимая Kolvo наихудшим случаем. Потом когда доходит до цикла, он
считает индекс массива 32+15-1=46. И выкидывает варнинг. Поправьте если не прав. - IBAH(12.01.2021 15:08 - 21:33)
- Не видал. В больших проектах исправление варнингов -- проблема. И
даже профи говнокодят очень даже запросто. И лучше разобраться с
предупреждениями от анализатора (час на одно), чем разгребать
трудноуловимые баги (по неделе на один). В данном же случае то ли с
integral promotion в компиляторе проблемы (или специально
отключено), или анализатор действительно глючный. Я всегда был о
IAR невысокого мнения... Из бесплатных можно пользоваться
clang-tidy или clang-analizer fk0(13 знак., 11.01.2021 22:53)