ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° cppcheck 2.6, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° статичСн ΠΊΠΎΠ΄ Π·Π° C++ ΠΈ C Π΅Π·ΠΈΡ†ΠΈ

ИзлСзС Π½ΠΎΠ²Π° вСрсия Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½Π° статичСн ΠΊΠΎΠ΄ cppcheck 2.6, която Π²ΠΈ позволява Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ класовС Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C ΠΈ C++, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° нСстандартСн синтаксис, Ρ‚ΠΈΠΏΠΈΡ‡Π΅Π½ Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми. ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½Π° Π΅ колСкция ΠΎΡ‚ плъгини, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΈΡ‚ΠΎ cppcheck сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ систСми Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция ΠΈ тСстванС ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° прСдоставя Ρ‚Π°ΠΊΠΈΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° със стила Π½Π° ΠΊΠΎΠ΄Π°. Π—Π° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈΠ»ΠΈ свой собствСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΈΠ»ΠΈ външСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΎΡ‚ Clang. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π²Π° скрипта donate-cpu.py Π·Π° прСдоставянС Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ рСсурси Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π½Π° Debian. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· GPLv3.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° cppcheck Π΅ фокусирано Π²ΡŠΡ€Ρ…Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π½Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са опасни ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° бСзопасността. Π¦Π΅Π»Ρ‚Π° Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° сС свСдат Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ„Π°Π»ΡˆΠΈΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ. Π‘Ρ€Π΅Π΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ към Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, дСлСния Π½Π° Π½ΡƒΠ»Π°, цСлочислСни ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½ΠΈΡ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° измСстванС Π½Π° Π±ΠΈΡ‚ΠΎΠ²Π΅, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ прСобразувания, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° STL, Π΄Π΅Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π½Π° Π½ΡƒΠ»Π΅Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π», ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ слСд дСйствитСлния Π΄ΠΎΡΡ‚ΡŠΠΏ към Π±ΡƒΡ„Π΅Ρ€Π°, ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.

Π’ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия:

  • Π‘Π»Π΅Π΄Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ към ядрото Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°:
    • липса Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π² тялото Π½Π° функцията;
    • запис Π½Π° ΠΏΡ€ΠΈΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‰ΠΈ сС Π΄Π°Π½Π½ΠΈ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅;
    • сравняваната стойност Π΅ извън стойностното прСдставянС Π½Π° Ρ‚ΠΈΠΏΠ°;
    • оптимизацията Π·Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π΅ сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° std::move(local);
    • Ρ„Π°ΠΉΠ»ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ (ΠΏΠΎΡ‚ΠΎΠΊ);
  • Π·Π° Unix ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° диагностични ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²Π΅;
  • Π΄ΠΎΠ±Π°Π²Π΅Π½ символСн Π°Π½Π°Π»ΠΈΠ· Π·Π° ValueFlow. Използва проста Π΄Π΅Π»Ρ‚Π° ΠΏΡ€ΠΈ изчисляванС Π½Π° Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π΅ нСизвСстни ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ;
  • ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° списъка с Ρ‚ΠΎΠΊΠ΅Π½ΠΈ "define", ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚ с #include;
  • Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π΅Π½ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ , ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΊΠ°Ρ‚ΠΎ std::size, std::empty, std::begin, std::end ΠΈ Π΄Ρ€. ΠΌΠΎΠΆΠ΅ Π΄Π° ΡƒΠΊΠ°ΠΆΠ΅ yeld ΠΈΠ»ΠΈ action Π·Π° ΡΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΠΈ;
  • Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π΅Π½ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»Π½Π° собствСност. Π’Π΅Ρ‡Π΅ сС ΠΈΠ·Π΄Π°Π²Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° висящи ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ към Ρ‚Π΅Π·ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ;
  • ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° β€”cppcheck-build-dir;
  • htmlreport Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° информация Π·Π° Π°Π²Ρ‚ΠΎΡ€Π° (с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° git blame);
  • Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ прСдупрСТдСния Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са постоянни, Π½ΠΎ Π±ΠΈΡ…Π° ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚;
  • ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΈ са Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ ΠΎΡ‚ Misra C 2012, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ИзмСнСниС 1 ΠΈ ИзмСнСниС 2, са напълно Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° 1.1, 1.2 ΠΈ 17.3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ 1.1 ΠΈ 1.2 трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° 17.3 ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΊΠ°Ρ‚ΠΎ GCC.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€