ืจืืืชื ืคืจืกืื ืฉ-PVS ืืืื ืื ืชื ืชืืช ืืื ืืงืก, ืืืืืืชื ืื ืกืืช ืืืชื ืืคืจืืืงืืื ืฉืื. ืืื ืื ืฉืืฆื ืืื.
ืชืืื
Pros
ืชืืืื ืืืืื
ืืืงืฉืชื ืืคืชื ื ืืกืืื ืืื ืฉืืื ืื ืืืชื ืืืืชื ืืืื.
ืชืืขืื ืื ืืจืืจ
ืืฆืืื ื ืืืคืขืื ืืช ืื ืชื ืืื ืืขืืืช. ืขืืจื ืขืืืจ ืคืงืืืืช ืืกืืฃ ืืืื ื ืื ืื (ืืืจืืช ืฉืืฉ ืืื ืืื ืชืืื ืืช, ืจืื ืกืขืืฃ
ืืคืฉืจืืช ืื ืืชืื ืจื ืืืืื
ืื ืชื ืืฉ ืืคืฉืจืืช "ืกืื ืืจืืืช". -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
, ืืฉืืื ืื ืื ื ืืขื ืืืืื ืืช. ืืื 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
ืืืคืืขื ืืื ืืื "ืจืืืช" ืฉืื ืืื ืฉื ืงืืื, ืืื ืื ืืฆืืชื ืขืืืื ืฉืื ืืืจ ืืชืืขืื.
ืืืืคื ืืืื, ืื ืื ืืจืืจ. ืืื ืืฆืืชื ืืื ืืืงืกืืืื.
ืืืืจื ืฉื ืงืืืืช ืืืืคืฉืืช ืขื 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
ืืคืฉืจ ืืืชื ืืคืจืืืงื ืฉืื ืืืื ืืจืื ืขื ืืงืื ืฉืื.
ืืืฆืื ืืชืงื
ื ืกื ืื ืืืฉืชืืฉ ืืืืจืื ืชืืืื ืคืืืคืืจืื ืื ืืฉ ืื ืืืืื ืกืื ืืจืืืื, ืืื ืืชื ืืืฉ ืื ืืืื ืืืขืืืื, ืขืืืฃ ืืืชื ืืืืืงืื ืืืืืืื ืขืืืจ ืคืงืืืืช ืืืงืจื (ืื ืืฉืื ืืืจ) ืืคืฉืื ืื ืชืืชื ืืงืื ืฉืื ืืืืืช ืงืืืคืืืฆืื ืืชื ืืื ืื ื ืชืืืื.
ืืืฆืื ืืกืื ืืืงื ืฉื ืคืขืืื ืจืืืื
ืืืกืคื ืืืืืช ืืืืืช ืืืืืจ, ืืืคื ืืืื ืืืืืช ืืคื, ืงืจืืืช ืืคืื ืงืฆืื ืืืืืช ืืืืืช ืงืจืืืช ืคืื ืงืฆืื, ืืขืชืงื ืืืืืช ืืืืืช ืืขืชืงื, carry ืืืืืช ืืืืืช carry, ืืืื ืืืื ืืืืืช ืืืืจืฆืื, ืืืืจืืืจ ืืืื ืืืืืช ืงืืืื ++
ืืืชืืืืกืืช *
. ืืื ืืืื ืืื ืืืื.
ืื ื ืืืฉื ืฉืืจืขืืื ืืจืืจ. ืืฉื ื ืืืกืืืืช ืืืืกืกืืช ืฉืืื ื ืืืืืืืช, ืื ืื ืืืฉืชืืฉืื ืืืงืืจืืื ืฉื ืืงืื ืฉืื ืืฆืคืื ืืจืืืช. ืื ืชื ืกื ืืืขืจืื ืขื ืืืจืื, ืืืจืช ืชืขืจืื ืขื ืขืฆืื.
ืืชืื ืงืื ืชืืื
ืงืืื ืื, ืื ื ืืชืืืื ืืกืคืจืืื ืืกืื ืืจืืืช. ืจืฆืื ืืืื ืฉื ืืชื ืืืื ืืืฉืชืืฉ ืืืืฉืงื ืืืืืงืืช ืืืคืื ืงืฆืืืช ืฉืื ืขื ืกืคืจืืืช ืกืื ืืจืืืืช ืืืืจืืช (ืืืืืื, Boost).
ืื ืชืืกืก ืืืกืชืื ืขื ืืืฉืงื STL ื-Boost. ืืืขื ืืจืืืื ื ืืืจืื, ืชืจืื ืฉื ืืืื ืืืืงืื ืจืืื.
ืืคืง ืืช ืืืจื ืืืื ืงืื ืคืชืื
ืขืืืจ ืืืชื ื ืืชืื ืกืืื, ืืฉื ื ืืคืืืช ืฉื ื ืืืื ืคืชืืืื ืืืื ื ืฉื ืืชื ืืืืจ ืจืง ืคืขื ืืืช ืืื ืคืจืืืงื ืขื ืืขืจืืช ืืื ืืื CMake.
ืืืจืืช ืืืจ
ืืืกืืฃ, ืืจืฆืื ื ืืืืืืฉ ืฉืื ื ืื ืชืืื ืฉืื ืืืฉืชืืฉ ื-PVS ืื ืืื ืื ืชื ืกืืื ืืืจ. ืืื ืื ื ืืืืืฅ ืื ืืืฉืื ืืื ืงืจื ืฉืื ืชื ืืกืืื ืืืฆื ืื ืืืื ืฉืืืืืช ืืฉืืขืืชืืืช ืืงืื ืฉืื.
ืื ืจืง ืชืืฆืื. ืื ืื ื ืฆืจืืืื ืืืคืฉ ืืืืกื ืืช ืืกืืื.
ืืงืืจ: www.habr.com