Paglabas ng cppcheck 2.6, isang static code analyzer para sa C++ at C na mga wika

Ang isang bagong bersyon ng static code analyzer cppcheck 2.6 ay inilabas, na nagbibigay-daan sa iyong tukuyin ang iba't ibang klase ng mga error sa code sa mga wikang C at C++, kabilang ang kapag gumagamit ng hindi karaniwang syntax, na karaniwan para sa mga naka-embed na system. Ang isang koleksyon ng mga plugin ay ibinigay kung saan ang cppcheck ay isinama sa iba't ibang pag-unlad, patuloy na pagsasama at mga sistema ng pagsubok, at nagbibigay din ng mga tampok tulad ng pagsuri sa pagsunod sa code sa istilo ng code. Upang i-parse ang code, maaari mong gamitin ang alinman sa iyong sariling parser o isang panlabas na parser mula sa Clang. Kasama rin dito ang donate-cpu.py na script upang magbigay ng mga lokal na mapagkukunan upang gumawa ng collaborative code review work para sa mga pakete ng Debian. Ang source code ng proyekto ay ipinamamahagi sa ilalim ng lisensya ng GPLv3.

Ang pagbuo ng cppcheck ay nakatuon sa pagtukoy ng mga problemang nauugnay sa hindi natukoy na pag-uugali at ang paggamit ng mga disenyo na mapanganib mula sa punto ng kaligtasan. Ang layunin din ay upang mabawasan ang mga maling positibo. Kabilang sa mga natukoy na problema: mga pointer sa mga di-umiiral na bagay, dibisyon sa pamamagitan ng zero, integer overflows, hindi tamang bit shift operations, hindi tamang conversion, mga problema kapag nagtatrabaho sa memorya, hindi tamang paggamit ng STL, null pointer dereferences, ang paggamit ng mga tseke pagkatapos ng aktwal na pag-access sa buffer, buffer overruns , paggamit ng mga uninitialized na variable.

Sa bagong bersyon:

  • Ang mga sumusunod na pagsusuri ay naidagdag sa core ng analyzer:
    • kawalan ng isang return operator sa function body;
    • nagtatala ng magkakapatong na data, tinutukoy ang hindi natukoy na gawi;
    • ang halagang inihahambing ay nasa labas ng representasyon ng halaga ng uri;
    • hindi nalalapat ang copy optimization sa return std::move(local);
    • ang file ay hindi mabubuksan nang sabay-sabay para sa pagbabasa at pagsulat sa iba't ibang mga stream (stream);
  • para sa mga platform ng Unix, nagdagdag ng suporta para sa pagpapakita ng mga diagnostic na mensahe sa iba't ibang kulay;
  • nagdagdag ng simbolikong pagsusuri para sa ValueFlow. Gumagamit ng simpleng delta kapag kinakalkula ang pagkakaiba sa pagitan ng dalawang hindi kilalang variable;
  • ang mga panuntunang ginamit para sa listahan ng mga token na "define" ay maaari ding tumugma sa #include;
  • tag ng aklatan maaari na ngayong maglaman ng tag , at naaayon sa mga libreng function, na maaaring tumanggap ng mga lalagyan gaya ng std::size, std::empty, std::begin, std::end, atbp. maaaring tukuyin ang yeld o aksyon para sa mga konektor;
  • tag ng aklatan maaari na ngayong maglaman ng tag para sa mga matalinong payo na may natatanging pagmamay-ari. Ang isang babala ay inilabas na ngayon tungkol sa mga nakabitin na sanggunian sa mga ganitong uri ng matalinong payo;
  • naayos ang mga problema sa pagproseso ng β€”cppcheck-build-dir parameter;
  • Ang htmlreport ay maaari na ngayong magpakita ng impormasyon tungkol sa may-akda (gamit ang git blame);
  • pinahabang babala tungkol sa mga variable na hindi pare-pareho, ngunit maaaring maging;
  • Ang mga naipon na pagkakamali at pagkukulang ng analyzer ay naitama.

Bukod pa rito, ang mga tseke mula sa Misra C 2012, kasama ang Amendment 1 at Amendment 2, ay ganap na ipinatupad, maliban sa mga panuntunan 1.1, 1.2 at 17.3. Ang mga tseke 1.1 at 1.2 ay dapat gawin ng compiler. Ang pag-verify 17.3 ay maaaring isagawa ng isang compiler tulad ng GCC.

Pinagmulan: opennet.ru

Magdagdag ng komento