ืืื ืืึธื ืืขืืขื ืึท ืืืกืืึทืืข ืึทื PVS ืืื ืืขืืขืจื ื ืฆื ืึทื ืึทืืืื ืืื ืืขืจ ืืื ืืงืก, ืืื ืืึทืฉืืึธืกื ืฆื ืคึผืจืืืืจื ืขืก ืืืืฃ ืืืื ืืืืืขื ืข ืคึผืจืึทืืืฉืขืงืก. ืืื ืืืก ืืื ืืขืจืคืื ืืจืืืกืืขืงืืืขื.
ืฆืืคืจืืื
ืคึผืจืึธืก
ืึธืคึผืจืืคืืง ืฉืืืฆื
ืืื ืืื ืืขืืขืื ื ืคืจืืฆืขืก ืฉืืืกื ืืื ืืขื ืืื ืขืก ืืืจ ืืขืฉืืงื ืืขื ืืขืืื ืืื.
ืืึทื ืฅ ืงืืึธืจ ืืึทืงืืืืขื ืืืืฉืึทื
ืืืจ ืืขืจืืื ืฆื ืงืึทืืขืจ ืื ืึทื ืึทืืืืขืจ ืึธื ืงืืื ืคืจืืืืขืืขื. ืืืืฃ ืคึฟืึทืจ ืงืึทื ืกืึธืื ืงืึทืืึทื ืื ืืื ืืืื ืื ืืืฆื (ืืึธืืฉ ืขืก ืืขื ืขื ืขืืืขืืข ืืขื ืืช ืืึธ, ืืขื ืึธืคึผืืืืืื ื
ืืขืืืขืืงืืื ืคืื ืืืืื-ืืจืขืืื ืึทื ืึทืืืกืืก
ืื ืึทื ืึทืืืืขืจ ืืื ืึท "ื ืึธืจืืึทื" ืึธืคึผืฆืืข -j
, ืึทืืึทืืื ื ืึทื ืึทืืืกืืก ืฆื ืืืื ืืืจืืืขืงืึธืื ืืื ืคึผืึทืจืึทืืขื ืืื ืขืืืขืืข ืืึทืกืงืก. ืืึธืก ืกืึทืืืขืก ืึท ืคึผืืึทืฅ ืคืื ืฆืืื.
ืืื ืืืืืฉืืืึทืืึทืืืืฉืึทื
ืคืืืข ืคืึทืจืฉืืืขื ืข ืจืขืืืืืึทื ืคึฟืึธืจืืึทืืืจืื ืืขื, ืคืื ืืขืงืกื ืฆื ืึท ืงืืืื ืืืขื ืคึผืืกืง.
ืืจืื ื ืื ืึทืืจืืืฉืึทื ืืื ืื ืคึฟืึทืจืืึทืืืื ื
ืื ืื ืืึทืงืืืืขื ืืืืฉืึทื ืืื ืืืืฃ ืืืืขืจ ืืืขืืืืืื, ืืื ืงืขื ื ืึธืจ ืืึธืื ืึทื ืืืื ืืืื ืคึผืจืืืขืงื ืืื ืืขืืืื ืืื CMake, ืึทืืฅ ืืื ืืืืขืจ ืคึผืฉืื.
ืืื ืืืึทืื ืึธืกืืืง ืืืกืงืจืืคึผืฉืึทื ื
ืืืื ืืืจ ืืืฉืขื ืขืจืืื ืจืขืืืืืึทื ืืื ืืึธืืข fullhtml
, ืืขืืึธืื ืืขืืขืจ ืึธื ืืึธื ืืื ืึท ืืื ืง ืฆื ืึท ืืืึทืื ืึธืกืืืง ืืึทืฉืจืืึทืืื ื, ืืื ืืขืจืงืืขืจืื ืืขื, ืงืึธื ืืืืฉืคืืื ืืื ื ืึธื ืืื ืงืก.
ืงืึธื ืก
ืืืืืืืกื ืืืงืืื ืคืื ืื C ++ ืฉืคึผืจืึทื ืืืจื ืื ืึทื ืึทืืืืขืจ
ืฆืื ืืึทืืืืขืจื, PVS ืืื ืืืื ืกืื ืืึทืงืก ืขืจืจืึธืจืก ืืื ืืืฉืขื ืขืจืืืฅ ืคืึทืืฉ positive ืึทืจืืืงืืขื ืืืขื ืื ืงืึธื ืืื ืืึธืจ ืจืืืืืง.
ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืขืก ืืื ืึท ืคึฟืื ืงืฆืืข ืืืึธืก ืงืขืจื 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
ืืึธ ืืึธืื ืืื ืืึทืืืืื ืขืืืขืืข "ืืขืืืขืืก" ืืืึธืก ืืขื ืขื ื ืืฉื ืืขืืืขื ืืึธืจื ืคืจืืขืจ, ืืื ืืื ืืึธื ืืืื ื ืืฉื ืืขืคึฟืื ืขื ืขืคึผืขืก ืืืขืื ืืื ืืื ืื ืืึทืงืืืืขื ืืืืฉืึทื.
ืืื ืึทืืืขืืืื, ืขืก ืืื ื ืืฉื ืงืืึธืจ. ืึทื ืก ืืืึธืก ืืื ืฉืืขืื ืึทืืฅ ืฆื ืื ืืึทืงืกืืืื.
ื ืืื ืื ื ืืจืืฉืข ืฉืฐืขืจื ืืืืฃ ืงืืืฉ
ืฆืืืื ืคืื ืื ืืจืื ืคึผืจืึทืืืฉืขืงืก ืืื ืึทื ืึทืืืืื ื ืืฆื ืึท ืึทืคึผืึทืจืึทื ืืขืกืืื ื ืืืืืืึธืืขืง
ืืื ื ืืฉื ื ืขืืขื ืืื ืืฉืืื ืืืืืืืืจืขืึทืืื ื
ืขืก ืืขื ืขื ืคืืืข ืคืึทืืฉ ืคึผืึทืืึทืืืืื ืืืขืื ืกืึทืคึผืึธืืืึทืืื ืึทื ืืฉืืื ืืืฉืื ื ืืืขืจืืึทืืึทืื ืึธืืขืจ ืกืึธืฃ ืืืคึผืก, ืืฉืขืช ืึทืจืืขื ืืื ืื ืืืขืจืืึทืืึทืื ืึทืงืขืจื ืคึฟืื ืคืึทืจืฉืืืขื ืข ืคึฟืขืืขื, ืืื ืืืื ืืึธืก ืืื ื ืืฉื ืึทืืื, ืึทืคึผืึทืจืึทื ืืขืกืฅ ืืืึธืื ื ืืฉื ืึทืจืืขืื.
ืึธืืขืจ, ืงืขื ืึท ืกืืึทืืืง ืึทื ืึทืืืืขืจ ืืคืืื ื ืขืืขื ืืขื ืืื ืืฉืืื? ืืืืืก ื ืืฉื.
ืจืขืืืืืึทืื ืคืื
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 ืึธืืขืจ ืงืืื ืื ืืขืจืข ืกืืึทืืืง ืึทื ืึทืืืืขืจื. ืึธืืขืจ ืืื ืืืืืงื ืืืจ ืฆื ืืจืึทืืื ืืืขืื ืืื ืขืก ืืขืืจืืคื ืึทื ืื ืกืืึทืืืง ืึทื ืึทืืืืขืจ ืงืขืกืืืืขืจ ืืขืคึฟืื ืขื ืืึทืืืึทืืืง ืขืจืจืึธืจืก ืืื ืืืื ืงืึธื.
ืืึธืก ืืื ื ืึธืจ ืึท ืงืึทื ืกืึทืงืืืึทื ืก. ืืืจ ืืึทืจืคึฟื ืฆื ืงืืงื ืคึฟืึทืจ ืืื ืขืืืืื ืืจื ืื ืกืืื.
ืืงืืจ: www.habr.com