ΠΠΈΠ΄ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π·Π° ΡΠΎΠ²Π°, ΡΠ΅ 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, Π·Π°ΡΠΎΠ²Π° ΠΈ Π΅ 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 ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠΈΠΏΠ° Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΡΠ°:
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
