НСзависим ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° 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, Π·Π° Ρ‚ΠΎΠ²Π° Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½. Но 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.

Π•Π·ΠΈΠΊ

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

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

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

ΠŸΠΎΠΌΠΎΡ‰ Π·Π° pvs-studio-analyzer Ρ‡Π΅Ρ‚Π΅:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

ΠŸΡ€Π΅ΠΊΠ°Ρ€Π°Ρ… дълго Π²Ρ€Π΅ΠΌΠ΅ Π² ΠΎΠΏΠΈΡ‚ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π° къдС Π΄Π° ΠΎΡ‚ΠΈΠ΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ (β€žΠ΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΡ‚ΠΎΠΉΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅β€œ) ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. ΠžΠΏΠΈΡ‚Π°Ρ… сС Π΄Π° Π³ΠΈ изброя Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ със Π·Π°ΠΏΠ΅Ρ‚Π°ΠΈ:

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            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

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

ΠšΠ°Ρ‚ΠΎ цяло Π½Π΅ Π΅ ясно. Π—Π°Ρ‚ΠΎΠ²Π° настроих всичко Π½Π° максимум.

ΠšΡƒΠΏ Π³Π»ΡƒΠΏΠ°Π²ΠΈ псувни ΠΏΠΎ адрСс Π½Π° Catch

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

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

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

Има ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°Π»ΡˆΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΈ Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ нишки ΠΈ Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ бСшС Ρ‚Π°ΠΊΠ°, Ρ‚ΠΎΠ³Π°Π²Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΈΡ‚Π΅ тСстовС нямашС Π΄Π° работят.

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

Но ΠΌΠΎΠΆΠ΅ Π»ΠΈ статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π΄ΠΎΡ€ΠΈ Π΄Π° Π²Π·Π΅ΠΌΠ΅ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄? Π½Π΅ Π·Π½Π°ΠΌ

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

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

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

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

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