ΠΠΈΠ΄ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ PVS ΡΠ΅ Π΅ Π½Π°ΡΡΠΈΠ» Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎΠ΄ Linux, ΠΈ ΡΠ΅ΡΠΈΡ Π΄Π° Ρ ΠΈΠ·ΠΏΡΠΎΠ±Π²Π°ΠΌ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. Π Π΅ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·Π»Π΅Π·Π΅ ΠΎΡ ΡΠΎΠ²Π°.
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅
ΠΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»ΠΈΡΡΠΈ
ΠΡΠ·ΠΈΠ²ΡΠΈΠ²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°
ΠΠΎΠΈΡΠΊΠ°Ρ ΠΏΡΠΎΠ±Π΅Π½ ΠΊΠ»ΡΡ ΠΈ ΠΌΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈΡ Π° ΡΡΡΠΈΡ Π΄Π΅Π½.
ΠΠΎΡΡΠ° ΡΡΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
Π£ΡΠΏΡΡ
ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. ΠΠΎΠΌΠΎΡ Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΡΡΠΎ Π΅ Π½Π°Π»ΠΈΡΠ½Π° (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠΊ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΎΠΏΠ»Π°ΠΊΠ²Π°Π½ΠΈΡ, Π²ΠΈΠΆΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π°
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠΊΠΎΠ² Π°Π½Π°Π»ΠΈΠ·
ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡ "ΡΡΠ°Π½Π΄Π°ΡΡ". -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.
ΠΠ½ΠΎΠ³ΠΎ Π±Π°Π²Π΅Π½ ΡΠ°ΠΉΡ
ΠΠ°, Π² ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΠΎ Π²ΡΡΠΊΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ° Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎΡΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ. ΠΠΎ ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ
Ρ Π²ΡΡΠ·ΠΊΠ°, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°ΠΊΠ°ΡΠ΅ Π΄ΠΎΡΡΠ° Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π°
ΠΠ·ΠΈΠΊ
ΠΡΠΈΡΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ° Π½Π° ΡΡΡΠΊΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ½ΠΎ. ΠΠΎ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π²ΠΈΠ½Π°Π³ΠΈ Π²ΠΎΠ΄ΡΡ Π΄ΠΎ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠΈ Π±ΠΈΠ»ΠΎ Ρ ΡΠ±Π°Π²ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅ Π΅Π·ΠΈΠΊΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°ΡΠ° Π²Π΅Π΄Π½Π°Π³Π° Π½Π° ΡΡΡΠΊΠΈ. ΠΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΡ ΡΠ°ΠΊΠ°Π²Π° ΠΎΠΏΡΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠ΅ΡΠ΄ΠΎΠ±Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΈ Π½ΠΈΠ²Π° ΠΏΡΠ΅Π· ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°
ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π΄Π²Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (ΡΠΎΠ²Π° 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
ΠΠ²Π° ΠΎΡ ΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΠΈΡΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ
, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠΈ
ΠΠ΅ ΠΎΡΡΠΈΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΠ°
ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π»ΡΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΈ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΈΠΊΠ»ΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΈ Π°ΠΊΠΎ ΡΠΎΠ²Π° Π½Π΅ Π±Π΅ΡΠ΅ ΡΠ°ΠΊΠ°, ΡΠΎΠ³Π°Π²Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π½ΡΠΌΠ°ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ.
ΠΠΎ ΠΌΠΎΠΆΠ΅ Π»ΠΈ ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π΄ΠΎΡΠΈ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄? Π½Π΅ Π·Π½Π°ΠΌ
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ
PVS Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈ ΡΠ΅Π°Π»Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ 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