LINUX.ORG.RU

Cppcheck 2.5

 , , ,


2

5

Вышла новая версия статического анализатора для С и С++.

В новой версии:

В парсере:

  • различные исправления;
  • теперь поддерживаются все возможности c++11, c++14, c++17;
  • частичная поддержка с++20.

Также анализатор теперь:

  • знает больше об API;
  • показывает меньше ненужных предупреждений;
  • находит больше багов;
  • исправлены вылеты и ложные срабатывания в Misra.

Добавлены новые проверки:

  • подозрительное присваивание контейнера/итератора в условии;
  • повторное пробрасывание текущего исключения с помощью throw;.

Примеры кода, которые демонстрируют новые проверки:

void f(std::string s) {
  if (s = "123") {
  }
}
Assignment in condition should probably be comparison
void func1(const bool flag) { try{ if(!flag) throw; } catch (int&) { ; } }
Rethrowing current exception with 'throw;', it seems there is no current exception to rethrow.
If there is no current exception this calls std::terminate(). More: https://isocpp.org/wiki/faq/exceptions#throw-without-an-object

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: xaizek (всего исправлений: 1)

Хорошо, но мало. Cppcheck хорош, что бы им код перед коммитом проверять на совсем глупые ошибки. В паре с scan-build из clang'a уже вполне годное средство получается для тех, у кого svace нет :)

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от BceM_IIpuBeT

А 2к21

2 кило это. На Западе так принято. Там никто никто не говорит «ту саузенд», им проще сказать «ту кей» или просто твенти (говорят двадцать, двадцать один вместо две тысячи двадцать один)

tz4678 ★★
()
Ответ на: комментарий от tz4678

Плюсы там, где важна оптимизация. Например на железках телекомовских типо роутеров всяких и т.д. большая часть с/с++.

lv ★★
()
Ответ на: комментарий от tz4678

А разработка по-твоему сводится только с сайтам и играм? Браузер, из которого ты пишешь, на каком языке разработан?

Возвращаясь к TIOBE, а тебя не смущает, что там есть Matlab и Delphi?

На матлабе математики кучу всего лабают и ML-щики всякие, Delphi едет на огромном количестве легаси, ты удивишься, но даже Fortran еще востребован.

Но если тебе этого не достаточно, то вот вакансии на HH: С++, PHP. По-моему так количество вакансий вполне сопоставимое.

EugeneBas ★★
()
Ответ на: комментарий от wandrien

Что удобно? В элетронике удобно, а года в быту зачем так писать? Тем более, как уже заметили 2к21 в первую очередь это 2210, 200021 и уже в самом конце 2021.

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от BceM_IIpuBeT

Не зачем, просто имбецилам важно выделяться на фоне обычных нормальных людей.

anonymous
()
Ответ на: комментарий от wandrien

Чем удобней 2к21 2021? Совсем крыша поехала.

anonymous
()
Ответ на: комментарий от wandrien

Тем более, как написать 2021 и 2210 год в этой зумерской нотации?

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от wandrien

Речь про года, а он про резисторы. Удобный прием - перевести тему, а потом «А что я? Я не про то»

anonymous
()
Ответ на: комментарий от anonymous

Ну это вы уже дальше тут мысль развили, я не всё подряд читаю.

Года так записывать - тупость

2к21 - это 2210 получается.

wandrien ★★
()
Ответ на: комментарий от BceM_IIpuBeT

2k21 имеет смысл использовать, чтобы детектить задротов типа тебя, которые умеют общаться только на строго формализованном языке. Обычно такие люди любят компостировать мозги другим о том как правильно писать даты и ставить пробелы перед единицами измерения.

anonymous
()
Ответ на: комментарий от anonymous

Да уж лучше быть задротом, чем имбецилом типа тебя.

anonymous
()
Ответ на: комментарий от tz4678

В чем проблема матлаба? Или думаешь он не настолько популярен в реальности? Ведь норм язык для своих задач и для инженеров которым программирование не очень важно.

maggotroot
()
Ответ на: комментарий от fsb4000

Не нужно. Везде где я пытался проверить этим пивом оно находило лишь мусор не являющийся ошибкой. Как вообще можно написать так с ошибкой ведь тогда и логика программы и тесты будут ломаться или плюсовики уже до уровня веб макак отпустились?!?!

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от bhfq

Как вообще можно написать так с ошибкой ведь тогда и логика программы и тесты будут ломаться

Спроси у Эдика, он специально пишет UB код и гордится этим, и исправляться не хочет. Тесты могут проходить, но ошибки всё равно есть. Это напрямую не связано.

Вот пример UB, который не каждый санитайзер найдёт (и в обычном режиме уж и подавно), а анализаторы такое теоретически могут находить:

https://gcc.godbolt.org/z/xGK51oMa4

fsb4000 ★★★★★
() автор топика
Последнее исправление: fsb4000 (всего исправлений: 2)
Ответ на: комментарий от lucky_guy

то есть по твоему получается что запись словами «две тысячи двадцать первый» == 200021? Потому что именно это там и написано.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

По-нашему получается, что год писать нужно как 2021, а кто пишет через букву - больной на голову придурок.

anonymous
()
Ответ на: комментарий от anonymous

Имеешь право на такое мнение. А я имею право на мнение, что больной на голову придурок это тот, кто прикопался к тому как кто то пишет даты.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от fsb4000

а анализаторы такое теоретически могут находить:

Да нихрена они ничего не могут в многопоточной асинхронной программе находить. Я пересобирал проект с санитайзерами шланга и сам тупо вручную имитировал работу с программой - нашел пару мест. Так что пивас нужен лишь вебмакакам. Cppcheck можно подключить в qtcreator и он будет работать нормально в фоне. Чтобы пивас работал нормально в фоне нужно что-то типа 16 ядерного 5 ггц турбоистребителя.

Я смотрел на Nim - язык с пустой документацией и забагованными исключениями в .async. блоках кода. Я смотрел на D - отличная документация но язык в стагнирующем состоянии. Вернулся на плюсы.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от anonymous

Для любого человека его мнение — это реальность. До поры до времени.

А юзернейм знатно набросил. В теме про С++ обсуждаем написание использование различных форматов дат в разговорном языке. Сейчас еще и подеремся.

aist1 ★★★
()
Ответ на: комментарий от anonymous

Там скорее всего просто

#define true 1
#define false 0
anonymous
()
Ответ на: комментарий от anonymous

Там что, невозможно сделать ошибку вида: if (s = «123»)…;? Или он сам предупреждает о таких ошибках?

За такую ошибку даже интерпретатор Питона даст по рукам, не говоря уже о любом мало-мальски вменяемом компиляторе типа Паскаля или Фортрана. Тем более Раст.

Vudod ★★★★★
()
Ответ на: комментарий от wandrien

а как ты определишь, что это не специально? в c++ сработает aaa=bbb, так не перепутаешь

anonymous
()
Ответ на: комментарий от anonymous

Такое скорее через valgrind надо ловить.

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

Раст сам по себе одна большая ошибка

anonymous
()
Ответ на: комментарий от wandrien

На таком вроде пивас как раз специализируется. Но во-первых, я предпочту тесты. Во-вторых, язык, который не заставляет писать такое убожество (С++ с автогенерируемыми операторами копирования, а сейчас даже и сравнения).

Хотя для udp-библиотеки из соседней новости наверное подобные вещи нужны.

anonymous
()
Ответ на: комментарий от anonymous

Именно такую — невозможно:

   Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
 --> src/main.rs:4:6
  |
4 |   if s = "123" {
  |      ^^^^^^^^^ expected `bool`, found `()`
  |
help: you might have meant to compare for equality
  |
4 |   if s == "123" {
  |        ^^

error: aborting due to previous error
theNamelessOne ★★★★★
()
Ответ на: комментарий от BceM_IIpuBeT

Растофанатиков же перебанили

Не перебанили, а перебанились, то есть, сами ушли. И не растофанатики, а просто хорошие программисты с хорошим вкусом.

anonymous
()
Ответ на: комментарий от fsb4000

А можно в общем случае знать, есть ли активное исключение или нет?

Может это функция - типа handle_any_exception? Явно параметр передавать нельзя, т.к. typeinfo потеряется.

Это примерно также, как вызвать функции, которые могут кинуть исключение из nothrow функций или деструктора - «можно, но осторожно».

anonymous
()
Ответ на: комментарий от BceM_IIpuBeT

У нас это лишено смысла два ка двадцать один дольше чем двадцать двадцать один
у нас ... говорят
по двум последним разрядам говорят

В английском тоже в разговорной речи 2021 - это «twenty twenty one». Внезапно, да? А по последним двум разрядам называют десятилетия: in the 90s. Посыпалась твоя теория про длинные названия годов в английском.

anonymous
()

Интересно, сколько воды утечёт прежде чем Cppcheck 2.5 появится в Astra Linux и на «Эльбрусе»?

Mischutka ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.