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

Видях публикация, която гласи, Ρ‡Π΅ PVS наистина Π΅ Π½Π°ΡƒΡ‡ΠΈΠ» ΠΊΠ°ΠΊ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΠΎΠ΄ Линукс, ΠΈ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ си. И Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ.


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

  1. ПлюсовС
  2. ΠœΠΈΠ½ΡƒΡΠΈ
  3. РСзюмС
  4. БлСдсловиС

ПлюсовС

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

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

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

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

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

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

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

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

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

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

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

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

ΠœΠΈΠ½ΡƒΡΠΈ

НСизвСстСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° C++

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

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

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

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

dynamic_tuple_management.hpp:29:1: Π³Ρ€Π΅ΡˆΠΊΠ°: V591 НС-void функция трябва Π΄Π° Π²ΡŠΡ€Π½Π΅ стойност.
dynamic_tuple_management.hpp:29:1: Π³Ρ€Π΅ΡˆΠΊΠ°: V2542 Ѐункция с Π½Π΅-void Ρ‚ΠΈΠΏ Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ трябва Π΄Π° Π²ΡŠΡ€Π½Π΅ стойност ΠΎΡ‚ всички ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ ΠΏΡŠΡ‚Π΅ΠΊΠΈ.

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

Π”Π°, Π² ΡƒΠ΅Π± интСрфСйса Π΄ΠΎ всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ° Π»ΠΈΠ½ΠΊ към ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ описаниС Π½Π° диагностика с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ. Но ΠΏΡ€ΠΈ натисканС Π½Π° Π»ΠΈΠ½ΠΊΠ° сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°Ρˆ доста дълго, Π° понякога сС случва ΠΈ 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.

ΠŸΠΎΠ²Π΅Ρ‡Π΅ информация ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² моята послСдна публикация.

БлСдсловиС

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

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

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

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