-
- мои пять копеек (фантазия на тему). Zoro(353 знак., 11.01.2021 23:38)
- Почему-то кажется, что виноваты беззнаковый тип Kolvo и Adres, и
integer promotion в if((Adres+Kolvo)>MaxReg) return; - Vit(11.01.2021 17:51)
- Прихожу к мысли, что анализатор тупенький. Запомнить что
(Adres+Kolvo)<=MaxReg не в состоянии! Когда доходит до цикла,
он об этом забывает. Вот так, этот тупорырый, не ругается: IBAH(398 знак., 11.01.2021 19:59)
- Сначала ему подсовывают инициализацию через возврат из функций (ХЗ что там - если анализатор не шибко умный, то ограничения определяются для типа), потом может существовать вариант (хоть Kolvo и Adres беззнаковые) при котором значение(я) слагаемых больше, а сумма будет меньше. Ну и последняя правка цикла таки отличается по начальным и последним значениям. Туповат-то-туповат, но кое-какие сопли видит - Vit(11.01.2021 20:32)
- Прихожу к мысли, что анализатор тупенький. Запомнить что
(Adres+Kolvo)<=MaxReg не в состоянии! Когда доходит до цикла,
он об этом забывает. Вот так, этот тупорырый, не ругается: IBAH(398 знак., 11.01.2021 19:59)
- Может он return не понимает? Можно обернуть в проверку обратного
условия. Но стиль п..ц какой-то, пардон фюр майн францюзишь - VLLV(11.01.2021 17:38)
- Смущают меня цифры [0,46], если было бы [0,47] те. [0,(32+16-1)], было бы понятно - IBAH(11.01.2021 17:56)
- Вероятно, анализатор считает, что индекс в диапазоне 0...15 +
0...31. Почему - вам виднее. - s_h_e(11.01.2021 18:01)
- Спасибо за наводку, въехал. Анализатор - дурак! - IBAH(11.01.2021 20:01)
- А я прямо чувствую, что анализатор тихонько посмеивается. Не такой
уж он и дурак! :-) - SciFi(11.01.2021 20:18)
- У меня такое ощущение, что эти ваши статические анализаторы
придумал Путин, чтобы людей занять. С помощью анализатора мне не
удалось ни разу обнаружить критическую ошибку. Может я мал и глуп,
и не видал больших... проектов? - IBAH(11.01.2021 21:58)
- Не видал. В больших проектах исправление варнингов -- проблема. И
даже профи говнокодят очень даже запросто. И лучше разобраться с
предупреждениями от анализатора (час на одно), чем разгребать
трудноуловимые баги (по неделе на один). В данном же случае то ли с
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)
- У меня такое ощущение, что эти ваши статические анализаторы
придумал Путин, чтобы людей занять. С помощью анализатора мне не
удалось ни разу обнаружить критическую ошибку. Может я мал и глуп,
и не видал больших... проектов? - IBAH(11.01.2021 21:58)
- А я прямо чувствую, что анализатор тихонько посмеивается. Не такой
уж он и дурак! :-) - SciFi(11.01.2021 20:18)
- Спасибо за наводку, въехал. Анализатор - дурак! - IBAH(11.01.2021 20:01)
- Вероятно, анализатор считает, что индекс в диапазоне 0...15 +
0...31. Почему - вам виднее. - s_h_e(11.01.2021 18:01)
- Смущают меня цифры [0,46], если было бы [0,47] те. [0,(32+16-1)], было бы понятно - IBAH(11.01.2021 17:56)
- Удивительный феномен, но программа с такими именами переменных и
функций никогда не будет нормально работать. Почему это так, не
спрашивайте :-) - il-2(11.01.2021 17:38)
- Рискну спросить, почему? - IBAH(11.01.2021 17:58)
- Разруха, Филипыч... il-2(156 знак., 12.01.2021 07:08)
- В качестве лекарства, рекомендую поразбирать немецкие, а лучше
итальянские исходники IBAH(1528 знак., 12.01.2021 20:43)
- Испанский. Напусти гуглотранслятор, ежели чего-то не понял - MBedder(12.01.2021 20:59)
- Испанский? Мбеддер у нас на этом специализируется. - SciFi(12.01.2021 20:57)
- может сойти и за румынский - IBAH(12.01.2021 21:02, youtube)
- На испанском разговаривает почти полмиллиарда человек. Гораздо
больше, чем на русском. А сколько на румынском, лучше и не
вспоминать... - SciFi(12.01.2021 21:06)
- Поэкперементил с Гуглом, мне кажется каталонский, ромеи повсюду - IBAH(12.01.2021 21:11)
- На испанском разговаривает почти полмиллиарда человек. Гораздо
больше, чем на русском. А сколько на румынском, лучше и не
вспоминать... - SciFi(12.01.2021 21:06)
- может сойти и за румынский - IBAH(12.01.2021 21:02, youtube)
- fuzzy, не? у кого мозги кипят? :-) - SciFi(12.01.2021 08:48)
- Уже вскипело :-) Промазал и не заметил :-) Хотя Fussy тоже годится :-) - il-2(12.01.2021 12:10)
- Там другая ошибка, в первой букве. Не F а P. - Argon(12.01.2021 11:18)
- В качестве лекарства, рекомендую поразбирать немецкие, а лучше
итальянские исходники IBAH(1528 знак., 12.01.2021 20:43)
- Разруха, Филипыч... il-2(156 знак., 12.01.2021 07:08)
- Рискну спросить, почему? - IBAH(11.01.2021 17:58)
- А зачем его побеждать? Стоит задача заглушить его совсем? Есть ли в
этом резон? - SciFi(11.01.2021 17:20)
- Когда коту делать нечего... Короче - перфекционизьм. - IBAH(11.01.2021 17:22)
- Перфекционизьм? Я бы начал с имён переменных :-) - SciFi(11.01.2021 17:22)
- Надо, как минимум, SetKolvo поменять на UstKolvo) - s_h_e(11.01.2021 17:47)
- Шаришь! - IBAH(11.01.2021 18:12)
- на тягу не влияет! - IBAH(11.01.2021 17:31)
- Я так вижу! - IBAH(11.01.2021 17:28)
- Надо, как минимум, SetKolvo поменять на UstKolvo) - s_h_e(11.01.2021 17:47)
- Перфекционизьм? Я бы начал с имён переменных :-) - SciFi(11.01.2021 17:22)
- Когда коту делать нечего... Короче - перфекционизьм. - IBAH(11.01.2021 17:22)
- А если написать: if((Adres+Kolvo)>=MaxReg) return; - Kceния(11.01.2021 17:18)
- Я бы так написал, но мне нужно именно if((Adres+Kolvo)>MaxReg) return; - IBAH(11.01.2021 17:20)
- При (Adres+Kolvo)==MaxReg вы выходите за границы массива, т.к. в
элемент Reg[MaxReg] писать нельзя. - Kceния(11.01.2021 17:22)
- Смотри внимательно - for(int i=0;i<Kolvo;i++); i принимает
значения от 0 до (Kolvo-1) - IBAH(11.01.2021 17:25)
- Тогда стоит попробовать определить счетчик цикла i как unsigned
short (т.е. того же типа, что и Kolvo). Можно еще цикл прописать в
форме: Kceния(100 знак., 11.01.2021 17:57)
- Не помогает... Тоже самое - IBAH(11.01.2021 18:08)
- Так оно наверняка поможет, хотя это явно избыточная проверка: Kceния(275 знак., 13.01.2021 16:39)
- Не помогает... Тоже самое - IBAH(11.01.2021 18:08)
- Тогда стоит попробовать определить счетчик цикла i как unsigned
short (т.е. того же типа, что и Kolvo). Можно еще цикл прописать в
форме: Kceния(100 знак., 11.01.2021 17:57)
- Смотри внимательно - for(int i=0;i<Kolvo;i++); i принимает
значения от 0 до (Kolvo-1) - IBAH(11.01.2021 17:25)
- При (Adres+Kolvo)==MaxReg вы выходите за границы массива, т.к. в
элемент Reg[MaxReg] писать нельзя. - Kceния(11.01.2021 17:22)
- Я бы так написал, но мне нужно именно if((Adres+Kolvo)>MaxReg) return; - IBAH(11.01.2021 17:20)