Π£Π²ΠΈΠ΄Π΅Π» ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ PVS ΡΠ°ΠΊΠΈ Π½Π°ΡΡΠΈΠ»ΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΠΈΠ½ΡΠΊΡΠ°ΠΌΠΈ, ΠΈ ΡΠ΅ΡΠΈΠ» ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π½Π° ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ . Π Π²ΠΎΡ ΡΡΠΎ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠ»ΡΡΡ
ΠΡΠ·ΡΠ²ΡΠΈΠ²Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
Π― Π·Π°ΠΏΡΠΎΡΠΈΠ» ΠΏΡΠΎΠ±Π½ΡΠΉ ΠΊΠ»ΡΡ, Π² ΡΠΎΡ ΠΆΠ΅ Π΄Π΅Π½Ρ ΠΌΠ½Π΅ Π΅Π³ΠΎ ΠΏΡΠΈΡΠ»Π°Π»ΠΈ.
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
ΠΠ°ΠΏΡΡΡΠΈΡΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ΄Π°Π»ΠΎΡΡ Π±Π΅Π· ΠΎΡΠΎΠ±ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π‘ΠΏΡΠ°Π²ΠΊΠ° ΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ (Ρ
ΠΎΡΡ ΡΡΡ Π΅ΡΡΡ Π½Π°ΡΠ΅ΠΊΠ°Π½ΠΈΡ, ΡΠΌ. ΡΠ°Π·Π΄Π΅Π»
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°
Π£ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π΅ΡΡΡ «ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ» ΠΎΠΏΡΠΈΡ -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.
ΠΡΠ΅Π½Ρ ΡΠΎΡΠΌΠΎΠ·Π½ΡΡΡΠΉ ΡΠ°ΠΉΡ
ΠΠ°, Π² Π²Π΅Π±-ΠΌΠΎΡΠ΄Π΅ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ. ΠΠΎ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΡΡΡΠ»ΠΊΡ ΠΆΠ΄Π°ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ ΠΈ
Π―Π·ΡΠΊ
ΠΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΅ΡΡΡ Π½Π° ΡΡΡΡΠΊΠΎΠΌ, ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎ. ΠΠΎ ΡΡΡΠ»ΠΊΠΈ ΠΈΠ· ΠΎΡΡΡΡΠ° Π²ΡΠ΅Π³Π΄Π° Π²Π΅Π΄ΡΡ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΡΡ Π²Π΅ΡΡΠΈΡ. ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ·ΡΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΠ°Π·Ρ Π½Π° ΡΡΡΡΠΊΠΎΠΌ. Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ Π½Π΅ Π½Π°ΡΡΠ».
ΠΠ΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΡΠΎΠ²Π½ΡΠΌΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΎΠ»Ρ
ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ Π΄Π²ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ (ΡΡΠΎ 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
ΠΠΎΠ»Π³ΠΎ ΠΏΡΡΠ°Π»ΡΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΡΠ΄Π° ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ («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 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
ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΈΡ Π² ΡΠ²ΠΎΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΡΠ·Π½Π°Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎ ΡΠ²ΠΎΡΠΌ ΠΊΠΎΠ΄Π΅.
ΠΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΠΉΡΠ΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ°
Π‘ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ Π²Π΅ΡΠΈ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ, Π° Π΅ΡΠ»ΠΈ ΡΠΆ Π±Π΅Π· Π½ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ, Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΈΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΏΠΎΠ΄ ΠΌΠ°ΠΊΡΠΎΡΠ½Ρ (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ-ΡΠΎ Π΅ΡΡ) ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ ΠΊΠΎΠ΄ Π² Π½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ .
ΠΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΠΉΡΠ΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ β ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ β Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡ β ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌ, ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ++
ΠΈ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ *
. Π ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΡΠΌΠ°Ρ, ΠΌΡΡΠ»Ρ ΠΏΠΎΠ½ΡΡΠ½Π°. ΠΡΡΡ ΡΡΡΠΎΡΠ²ΡΠΈΠ΅ΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ ΠΊ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½ΠΎ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ΅ ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΈΡΡΠΈΡΡ Π΄ΡΡΠ³ΠΈΡ , Π° ΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΈΡΡΠΈΡΠ΅ ΡΠ°ΠΌΠΈ ΡΠ΅Π±Ρ.
ΠΠΈΡΠΈΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ ΠΊΠΎΠ΄
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. ΠΡΠ΅Π½Ρ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΡΡΡΠΎΠΌ).
ΠΠ΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ STL ΠΈ Boost. ΠΠ° ΡΠ΅Π΄ΠΊΠΈΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΌ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π΄ΠΎΡΡΠΎΠΉΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ°ΠΆΠ°Π½ΠΈΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΡ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π²Π° ΠΎΡΠΊΡΡΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π° ΡΡΡΡ «ΡΠ°Π·» ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ CMake.
ΠΠΎΡΠ»Π΅ΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½Ρ, ΡΡΠΎ Ρ Π½Π΅ ΠΏΡΠΈΠ·ΡΠ²Π°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ PVS ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ. ΠΠΎ Ρ ΠΏΡΠΈΠ·ΡΠ²Π°Ρ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°ΠΊ Π²ΡΡΠ»ΠΎ, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΠΎ Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅. ΠΡΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ ΠΈ ΡΡΡΡΠ°Π½ΡΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com