Вход
Наше всё
Теги
codebook
PARTS
Поиск
Опросы
Закон
Понедельник
25 января
О смысле всего сущего
0xFF
Средства и методы разработки
Мобильная и беспроводная связь
Блошиный рынок
Объявления
Микроконтроллеры
ARM
AVR
PIC
PLD, FPGA, DSP
Кибернетика
Технологии
Схемы, платы, компоненты
Средства и методы разработки
/1068423
Топик полностью
VLLV
(11.01.2021 17:38, просмотров: 76)
в ответ на
Не могу победить статический анализатор IAR
- автор:
IBAH
Может он return не понимает? Можно обернуть в проверку обратного условия. Но стиль п..ц какой-то, пардон фюр майн францюзишь
Ответить
Ответы
Смущают меня цифры [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
,
)
Преобразования типов при операциях. Пункт 7. Если предыдущий пункт не выполняется то оба операнда приводятся к типу int
-
IBAH
(
14.01.2021 17:23
)
собственно вот это я и хотел сказать. (я про 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
)
Вот для таких случаев и нужен статический анализатор.
-
fk0
(
12.01.2021 21:46
)
Вроде бы логично.
-
SciFi
(
12.01.2021 15:18
)
Может я не умнее анализатора, но не понимаю как как расширение до int может тут повлиять.
IBAH
(266 знаков,
12.01.2021 14:57
)