ΠΠΈΠ΄ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π³Π»Π°ΡΠΈ, ΡΠ΅ PVS Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ Π½Π°ΡΡΠΈΠ» ΠΊΠ°ΠΊ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎΠ΄ ΠΠΈΠ½ΡΠΊΡ, ΠΈ ΡΠ΅ΡΠΈΡ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΡΠΈ. Π Π΅ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ.
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅
ΠΡΠ·ΠΈΠ²ΡΠΈΠ²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°
ΠΠΎΠΏΠΈΡΠ°Ρ Π·Π° ΠΏΡΠΎΠ±Π΅Π½ ΠΊΠ»ΡΡ ΠΈ Π² ΡΡΡΠΈΡ Π΄Π΅Π½ ΠΌΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠΈΡ Π°.
ΠΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΡΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
Π£ΡΠΏΡΡ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π±Π΅Π· ΠΎΡΠΎΠ±Π΅Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. ΠΠΌΠ° ΠΈ ΡΠΏΡΠ°Π²ΠΊΠ° Π·Π° ΠΊΠΎΠ½ΡΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠΊ ΠΈΠΌΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ, Π²ΠΈΠΆΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π° ).
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅
ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΠΈΠΌΠ° "ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°" ΠΎΠΏΡΠΈΡ -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 ΡΠΈΠΏ Π½Π° Π²ΡΡΡΠ°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΡΡΠ½Π΅ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈ ΠΏΡΡΠ΅ΠΊΠΈ.ΠΠ½ΠΎΠ³ΠΎ Π±Π°Π²Π΅Π½ ΡΠ°ΠΉΡ
ΠΠ°, Π² ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΠΎ Π²ΡΡΠΊΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ° Π»ΠΈΠ½ΠΊ ΠΊΡΠΌ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ. ΠΠΎ ΠΏΡΠΈ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° Π»ΠΈΠ½ΠΊΠ° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ°Ρ Π΄ΠΎΡΡΠ° Π΄ΡΠ»Π³ΠΎ, Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΈ .
ΠΠ·ΠΈΠΊ
ΠΡΠΈΡΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ° Π½Π° ΡΡΡΠΊΠΈ, ΡΠΎΠ²Π° Π΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ. ΠΠΎ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π²ΠΈΠ½Π°Π³ΠΈ Π²ΠΎΠ΄ΡΡ ΠΊΡΠΌ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°Ρ Π²Π΅Π΄Π½Π°Π³Π° Π½Π° ΡΡΡΠΊΠΈ. Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π΅ Π½Π°ΠΌΠ΅ΡΠΈΡ ΡΠ°ΠΊΠ°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ.
ΠΠ΅ΡΠ΄ΠΎΠ±Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Ρ Π½ΠΈΠ²Π°ΡΠ° Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠ΅Π· ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°
ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΡΠΎΠ²Π°, ΡΠ΅ Π΄Π²Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (ΡΠΎΠ²Π° 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
Π Π΄Π²Π° ΠΎΡ ΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΠΈΡΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ , ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΌΠΎΠ΄ΡΠ»Π½ΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅ . Π ΠΎΠ³ΡΠΎΠΌΠ½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ° (!!! 90 ΠΎΡ 138 Π² Π΅Π΄ΠΈΠ½ ΠΈ 297 ΠΎΡ 344 Π² Π΄ΡΡΠ³ !!!) ΠΈΠΌΠ°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄:

ΠΠ΅ ΠΎΡΡΠΈΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΠ°
ΠΠ½ΠΎΠ³ΠΎ Π»ΡΠΆΠ»ΠΈΠ²ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠΆ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈΠ»ΠΈ Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΈΠΊΠ»ΠΈ, ΠΏΡΠΈ ΡΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ, ΠΈ Π°ΠΊΠΎ Π½Π΅ Π±Π΅ΡΠ΅ ΡΠ°ΠΊΠ°, ΠΌΠΎΠ΄ΡΠ»Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π½ΡΠΌΠ°ΡΠ΅ Π΄Π° ΡΡΠ°Π±ΠΎΡΡΡ.

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