НСзависим ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° PVS-Studio (Linux, C++)

Видях ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ PVS наистина Π΅ Π½Π°ΡƒΡ‡ΠΈΠ» Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΠΎΠ΄ Linux ΠΈ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌ Π½Π° своитС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ.


Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅

  1. ПлюсовС
  2. ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ
  3. Π˜Ρ‚ΠΎΠ³
  4. БлСдсловиС

ПлюсовС

ΠžΡ‚Π·ΠΈΠ²Ρ‡ΠΈΠ²Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°

ΠŸΠΎΠΏΠΈΡ‚Π°Ρ… Π·Π° ΠΏΡ€ΠΎΠ±Π΅Π½ ΠΊΠ»ΡŽΡ‡, Π² ΡΡŠΡ‰ΠΈΡ Π΄Π΅Π½ ΠΌΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ…Π°.

Π”ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ясна докумСнтация

Успях Π΄Π° стартирам Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π±Π΅Π· особСни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ ΠΏΠΎΠΌΠΎΡ‰ Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΡƒΠΊ ΠΈΠΌΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ, Π²ΠΈΠΆΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ).

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π΅Π½ Π°Π½Π°Π»ΠΈΠ·

ΠΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΈΠΌΠ° "стандартна" опция -j, позволяваща Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π½Π°Π»ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Π² няколко Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ΠΎΠ²Π° спСстява ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅.

Π”ΠΎΠ±Ρ€Π° визуализация

Много Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°, ΠΎΡ‚ тСкстов Π΄ΠΎ малък ΡƒΠ΅Π± интСрфСйс. Π£Π΅Π± ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡŠΡ‚ Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½, Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π΅Π½, с подсказки Π΄ΠΎ Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΊΠΎΠ΄Π° ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ към описания Π½Π° диагностика.

ЛСсна интСграция Π² компилацията

Цялата докумСнтация Π΅ Π½Π° тСхния сайт, Ρ‰Π΅ ΠΊΠ°ΠΆΠ° само, Ρ‡Π΅ Π°ΠΊΠΎ Π²Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° CMake, всичко Π΅ ΠΌΠ½ΠΎΠ³ΠΎ просто.

Π”ΠΎΠ±Ρ€ΠΈ описания Π½Π° диагностикитС

Ако Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌ fullhtml, Ρ‚ΠΎ всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ° Π»ΠΈΠ½ΠΊ към описаниСто Π½Π° диагностика, със разяснСния, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΊΠΎΠ΄ ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅.

ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ

НСизвСстност Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡ‚ страна Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎ Π΅Π·ΠΈΠΊΠ° C++

Π—Π° съТалСниС, PVS понякога Π³Ρ€Π΅ΡˆΠΈ Π² синтаксиса ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ„Π°Π»ΡˆΠΈΠ²ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ напълно ΠΊΠΎΡ€Π΅ΠΊΡ‚Π΅Π½ ΠΊΠΎΠ΄.

НапримСр, ΠΈΠΌΠ° функция, която Π²Ρ€ΡŠΡ‰Π° void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

Π”Π°, ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΎΡ‚ΠΎ слово auto ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° void, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈ Π΅ auto. Но PVS ΠΈΠ·Π΄Π°Π΄Π΅ слСднитС ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

Много Π±Π°Π²Π΅Π½ сайт

Π”Π°, Π² ΡƒΠ΅Π± интСрфСйса Π΄ΠΎ всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ° Π»ΠΈΠ½ΠΊ към ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ описаниС Π½Π° диагностика с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ. Но ΠΏΡ€ΠΈ натисканС Π½Π° Π»ΠΈΠ½ΠΊΠ°, Ρ‡Π°ΠΊΠ°Π½Π΅Ρ‚ΠΎ Π΅ доста дълго, Π° понякога сС случва ΠΈ 504 Gateway Time-out.

Π•Π·ΠΈΠΊ

Всички описания са Π½Π° руски, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ. Но Π»ΠΈΠ½ΠΊΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π²ΠΈΠ½Π°Π³ΠΈ водят към английската вСрсия. ЩСшС Π΄Π° бъдС Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π·ΠΈΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ диагностика Π²Π΅Π΄Π½Π°Π³Π° Π½Π° руски. Π’ интСрфСйса Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Ρ‚Π°ΠΊΠ°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚.

НСудобно Π΅ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½ΠΈΠ²Π°Ρ‚Π° Π½Π° диагностика Ρ‡Ρ€Π΅Π· ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°

Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π΄Π²Π΅Ρ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Ρ‚ΠΎΠ²Π° Π΅ pvs-studio-analyzer ΠΈ plog-converter) ΠΈΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° диагностики.

Π‘ΠΏΡ€Π°Π²ΠΊΠ°Ρ‚Π° към pvs-studio-analyzer ΡΡŠΠΎΠ±Ρ‰Π°Π²Π°:

-a [MODE], --analysis-mode [MODE]
    MODE опрСдСля Ρ‚ΠΈΠΏΠ° Π½Π° прСдупрСТдСнията:
    1 - 64-Π±ΠΈΡ‚ΠΎΠ²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ;
    2 - Π·Π°ΠΏΠ°Π·Π΅Π½ΠΎ;
    4 - ΠžΠ±Ρ‰Π° Анализа;
    8 - ΠœΠΈΠΊΡ€ΠΎΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ;
    16 - Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΈ Искания ΠΎΡ‚ ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈ;
    32 - MISRA.
    Π Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ Ρ‡Ρ€Π΅Π· добавянС Π½Π° стойноститС.
    По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: 4

Π”ΡŠΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ… Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π° къдС Ρ‚ΠΎΡ‡Π½ΠΎ трябва Π΄Π° добавя (Β«adding the valuesΒ») ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅. ΠžΠΏΠΈΡ‚Π²Π°Ρ… сС Π΄Π° Π³ΠΈ изброявам с запСтая:

pvs-studio-analyzer analyze ... -a 1,4,16

ΠžΠΏΠΈΡ‚Π²Π°Ρ… сС Π΄Π° напиша ΠΊΠ»ΡŽΡ‡Π° няколко ΠΏΡŠΡ‚ΠΈ:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

И Π΅Π΄Π²Π° Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΈ Ρ…Ρ€ΡƒΠΌΠ½Π°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° са Π±ΠΈΡ‚ΠΎΠ²ΠΈ маски! И трябва Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅, Π° Π½Π΅ добавя стойноститС. НапримСр, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰ΠΈ диагностики, диагностики ΠΏΠΎ ΠΌΠΈΠΊΡ€ΠΎΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ MISRA, трябва Π΄Π° Π³ΠΈ ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΈΡ‚ΠΎΠ²ΠΈ маски Π² потрСбитСлскитС интСрфСйси ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ лош стил. Всичко Ρ‚ΠΎΠ²Π° моТСшС Π΄Π° бъдС сумирано ΠΈ Π²ΡŠΡ‚Ρ€Π΅, Π° Π½Π° потрСбитСля Π΄Π° сС прСдостави Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„Π»Π°Π³ΠΎΠ²Π΅.

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ° ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° plog-converter, която Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ‡ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠ° информация Π·Π° статичния Π°Π½Π°Π»ΠΈΠ·. Вя ΠΈΠΌΠ° свои спСцифични особСности.

Π‘ΠΏΡ€Π°Π²ΠΊΠ°Ρ‚Π° към ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° plog-converter ΡΡŠΠΎΠ±Ρ‰Π°Π²Π°:

-a, --analyzer            ΠžΠΏΡ€Π΅Π΄Π΅Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€(ΠΈ) ΠΈ Π½ΠΈΠ²ΠΎ(Π°), ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° сС
                          ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅, Ρ‚.Π΅.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: GA:1,2

Π’ΡƒΠΊ сС появиха ΠΊΠ°ΠΊΠ²ΠΈ Π»ΠΈ Π½Π΅ Β«Π½ΠΈΠ²Π°Β», ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ никъдС Π½Π΅ бяха спомСнавани, Π° ΠΈ Π² докумСнтацията Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Π½ΠΈΡ‰ΠΎ Π·Π° тях.

ΠžΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ, Π½Π΅ Π΅ ясно. Π—Π°Ρ‚ΠΎΠ²Π° всичко напълно Π³ΠΎ настройвах.

ΠšΡƒΠΏ Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π° Catch

Π’ Π΄Π²Π° ΠΎΡ‚ Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΎ тСстванС Catch2. И ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ (!!! 90 ΠΎΡ‚ 138 Π² Π΅Π΄ΠΈΠ½ ΠΈ 297 ΠΎΡ‚ 344 Π² Π΄Ρ€ΡƒΠ³ !!!) ΠΈΠΌΠ°Ρ‚ слСдния Π²ΠΈΠ΄:

НСзависим ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° PVS-Studio (Linux, C++)

НС ΠΎΡ‚Ρ‡ΠΈΡ‚Π° многопоточността

Много лъТливи ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΈ сработвания Π·Π° ΡƒΠΆ нСизмСняСми ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ, ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ става ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ нишки, ΠΈ Π°ΠΊΠΎ Π½Π΅ бСшС Ρ‚Π°ΠΊΠ°, ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈΡ‚Π΅ тСстовС нямашС Π΄Π° сработват.

НСзависим ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° PVS-Studio (Linux, C++)

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ Π»ΠΈ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ статичният Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π΄Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π°? НС Π·Π½Π°ΠΌ.

Π˜Ρ‚ΠΎΠ³

PVS Π½Π΅ ΠΎΡ‚ΠΊΡ€ΠΈ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π° истинска Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΌΠΎΠΈΡ‚Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Burst ΠΈ Proxima, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° прСдставя. Вярно Π΅, Ρ‡Π΅ някои Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π²Π΅Ρ‡Π΅ бяха ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ ΠΈ ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π²Ρ€Π΅ΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Cppcheck ΠΈ scan-build.

ΠžΠ±Ρ‰ΠΎΡ‚ΠΎ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ всички Ρ‚Π΅Π·ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΡΡŠΡ‰ΠΎΡ‚ΠΎ: Π΄Π°, Π½Π΅Ρ‰ΠΎ Ρ…Π²Π°Ρ‰Π°Ρ‚, понякога Π΄ΠΎΡ€ΠΈ Π½Π΅Ρ‰ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π½ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½.

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ (ΠΈ Π½Π° ΠΌΠ΅Π½ ΠΌΠΈ Π΅ приятно Π΄Π° мисля Ρ‚Π°ΠΊΠ°), Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° софтуСр, ΠΊΠΎΠΈΡ‚ΠΎ позволяват Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ количСство лош ΠΊΠΎΠ΄. По-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° Π½Π΅ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π³Π΅Ρ€ΠΎΠΈΡ‡Π½ΠΎ Π΄Π° Π³ΠΈ прСодоляватС.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΅ΠΌΠ°ΠΌ смСлостта Π΄Π° Π΄Π°ΠΌ няколко ΡΡŠΠ²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° C++ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Π΄Π° Π½Π΅ стрСляйтС Π½Π° сСбС си Π² ΠΊΡ€Π°ΠΊΠ°Ρ‚Π° ΠΈ Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΡƒΠ΄Π°Ρ€ΠΈ ΠΏΠΎ Π³Π»Π°Π²Π°Ρ‚Π° с Π³Ρ€Π°Π±ΠΈ.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ диагностикитС Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π² максимална стСпСн

ΠΠ°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° (ΠΈ Π²ΠΈ ΡΡŠΠ²Π΅Ρ‚Π²Π°) слСднитС ΠΎΠΏΡ†ΠΈΠΈ Π·Π° компилация:

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

Π’ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ Π³ΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° си, Π·Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎ Π·Π° ΠΊΠΎΠ΄Π° си.

Π‘ΠΏΠ°Π·Π²Π°ΠΉΡ‚Π΅ стандарта

ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ сС Π΄Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ зависимости ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ стандартни Π°Π½Π°Π»ΠΎΠ·ΠΈ, Π° Π°ΠΊΠΎ наистина Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС справитС Π±Π΅Π· тях, ΠΎΠ±Π³Ρ€Π°Π΄Π΅Ρ‚Π΅ Π³ΠΈ Π² спСциални Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΏΠΎΠ΄ макроси (ΠΈΠ»ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½) ΠΈ просто Π½Π΅ позволявайтС ΠΊΠΎΠ΄ΡŠΡ‚ Π²ΠΈ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² Π½Π΅ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ условия.

Π‘ΠΏΠ°Π·Π²Π°ΠΉΡ‚Π΅ стандартната сСмантика Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ трябва Π΄Π° бъдС ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° функция β€” ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функция, ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ трябва Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°, прСмСстванСто β€” Π΄Π° прСмСства, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ трябва Π΄Π° бъдС ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ, Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ трябва Π΄Π° ΠΈΠΌΠ° Π½Π°ΠΏΡ€Π΅Π΄ΡŠΠΊ ++ ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ *. И Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ, ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

Мисля, Ρ‡Π΅ ΠΌΠΈΡΡŠΠ»Ρ‚Π° Π΅ ясна. Има установСни ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Π·Π° спазванС, Π½ΠΎ ΠΊΠΎΠΈΡ‚ΠΎ всички ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° вашия ΠΊΠΎΠ΄ ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚ Π΄Π° видят. НС сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΉΡ‚Π΅ Π΄Π° Π½Π°Π΄Ρ…ΠΈΡ‚Ρ€ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅, ΠΈΠ½Π°Ρ‡Π΅ Ρ‰Π΅ Π½Π°Π΄Ρ…ΠΈΡ‚Ρ€ΠΈΡ‚Π΅ сами сСбС си.

ΠŸΠΈΡˆΠ΅Ρ‚Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ ΠΊΠΎΠ΄

На ΠΏΡŠΡ€Π²ΠΎ място ΠΈΠΌΠ°ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Много Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½ΠΎ интСрфСйситС Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ класовС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ със стандартни ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Boost).

НС сС ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡ‚Π΅ Π΄Π° Π½Π°Π΄Π·ΡŠΡ€Π½Π΅Ρ‚Π΅ Π² интСрфСйситС Π½Π° STL ΠΈ Boost. Π‘ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π΄ΠΊΠΈ случаи Ρ‚Π°ΠΌ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ достойни ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΏΠΎΠ΄Ρ€Π°ΠΆΠ°Π½ΠΈΠ΅.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ максимално ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ инструмСнти

Π—Π° ΡΡŠΡ‰ΠΈΡ статичСн Π°Π½Π°Π»ΠΈΠ· ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΏΠΎΠ½Π΅ Π΄Π²Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΈ инструмСнта, ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ с всСки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с систСма Π·Π° сглобяванС CMake.

ΠŸΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² моята rΓ©cente публикация..

БлСдсловиС

На Ρ„ΠΈΠ½Π°Π»Π° Ρ‰Π΅ подчСртая, Ρ‡Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ·ΠΎΠ²Π°Π²Π°ΠΌ Π΄Π° Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° PVS ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π΅ Π΄Ρ€ΡƒΠ³ΠΈ статични Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ. Но ΠΏΡ€ΠΈΠ·ΠΎΠ²Π°Π²Π°ΠΌ Π΄Π° сС замислитС ΠΊΠ°ΠΊ Π΅ възмоТно статичният Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ във вашия ΠΊΠΎΠ΄.

Π’ΠΎΠ²Π° Π΅ само слСдствиС. Врябва Π΄Π° сС Ρ‚ΡŠΡ€ΡΠΈ ΠΈ отстранява ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster