π Π Π°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎ Π½ΠΎΠ²ΡΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ
Π‘++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, Ρ Π½Π°Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ β Π² ΡΠ΅Π»ΠΈΠ·Π΅ 7.34 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ V1116.
ΠΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π±Π΅Π· ΠΏΠΎΡΡΠ½ΡΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ: `void DoSomething(const char *val) { if (!val) throw std::runtime_error { "" }; }
void Function() { const char *val = ....; try { DoSomething(val); } catch (std::runtime_error &err) { std::cerr << err.what() << std::endl; } }
Π ΡΡΠ½ΠΊΡΠΈΠΈ DoSomething Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π±ΡΠΎΡΠ°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΡΡΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠΏΠ°Π΄ΡΡ Π² std::cerr. ΠΠ°ΠΏΠΈΡΠ°Π² ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ»ΠΎΠ²Π½ΠΎ ΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ ΠΏΠΎΡΠ»Π°Π½ΠΈΠ΅: "Π‘ΡΠ°ΡΡΠ»ΠΈΠ²ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ". ΠΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡ Π΄Π»Ρ Π½ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ·Π²Π°Π»ΠΎ ΡΠ±ΠΎΠΉ.
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: `if (!val) { throw std::runtime_error { "[DoSomething]: " "the 'val' pointer was nullptr." }; } Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ.
ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ Π²ΡΠ΄Π°ΡΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ.
#cpp #PVS_Studio``Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π² ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅
Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π² ΡΡΠΎΠΌ ΡΠΎΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅
Π²ΠΎΠΉΠ΄ΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ
ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠΈ