ΠžΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° 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 ΠΈΠ»ΠΈ Π°ΠΊΡ†ΠΈΡ˜Π° Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ΠΈ;
  • ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сСга ΠΌΠΎΠΆΠ΅ Π΄Π° содрТи ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΈ ΠΊΠΎΠΈ ΠΈΠΌΠ°Π°Ρ‚ СдинствСна сопствСност. Π‘Π΅Π³Π° Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π·Π° висат Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ Π½Π° ΠΎΠ²ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΈ;
  • ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ β€”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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€