PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹เชจเซ€ เชธเซเชตเชคเช‚เชคเซเชฐ เชธเชฎเซ€เช•เซเชทเชพ (Linux, C++)

เชฎเซ‡เช‚ เชเช• เชชเซเชฐเช•เชพเชถเชจ เชœเซ‹เชฏเซเช‚ เชœเซ‡ PVS เช Linux เชนเซ‡เช เชณ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชถเซ€เช–เซ€ เชฒเซ€เชงเซเช‚ เชนเชคเซเช‚, เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชชเชฐ เช…เชœเชฎเชพเชตเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เช…เชจเซ‡ เช† เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡.


เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ

  1. ะŸะปัŽัั‹
  2. เชฎเชฟเชจเชฟเชธเซ€
  3. เชชเชฐเชฟเชฃเชพเชฎเซ‹
  4. เช‰เชšเซเชšเชพเชฐเชฃ

ะŸะปัŽัั‹

เชชเซเชฐเชคเชฟเชญเชพเชต เช†เชงเชพเชฐ

เชฎเซ‡เช‚ เชŸเซเชฐเชพเชฏเชฒ เช•เซ€เชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ€ เช…เชจเซ‡ เชคเซ‡เช“เช เชคเซ‡ เชœ เชฆเชฟเชตเชธเซ‡ เชฎเชจเซ‡ เชฎเซ‹เช•เชฒเซ€.

เชเช•เชฆเชฎ เชธเซเชชเชทเซเชŸ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ

เช…เชฎเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เช›เซ€เช. เช•เชจเซเชธเซ‹เชฒ เช†เชฆเซ‡เชถเซ‹ เชฎเชพเชŸเซ‡ เชฎเชฆเชฆ เชชเชฃ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ (เชœเซ‹เช•เซ‡ เช…เชนเซ€เช‚ เช•เซ‡เชŸเชฒเซ€เช• เชซเชฐเชฟเชฏเชพเชฆเซ‹ เช›เซ‡, เชตเชฟเชญเชพเช— เชœเซเช“ เชฎเชฟเชจเชฟเชธเซ€).

เชฎเชฒเซเชŸเชฟ-เชฅเซเชฐเซ‡เชกเซ‡เชก เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซ€ เชถเช•เซเชฏเชคเชพ

เชตเชฟเชถเซเชฒเซ‡เชทเช• เชชเชพเชธเซ‡ "เชธเซเชŸเชพเชจเซเชกเชฐเซเชก" เชตเชฟเช•เชฒเซเชช เช›เซ‡ -j, เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซ‡ เช˜เชฃเชพ เช•เชพเชฐเซเชฏเซ‹เชฎเชพเช‚ เชธเชฎเชพเช‚เชคเชฐ เชฐเซ€เชคเซ‡ เชนเชพเชฅ เชงเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡. เช†เชจเชพเชฅเซ€ เช˜เชฃเซ‹ เชธเชฎเชฏ เชฌเชšเซ‡ เช›เซ‡.

เชธเชพเชฐเซเช‚ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ

เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เช†เช‰เชŸเชชเซเชŸ เชซเซ‹เชฐเซเชฎเซ‡เชŸ, เชŸเซ‡เช•เซเชธเซเชŸเชฅเซ€ เชฒเชˆเชจเซ‡ เชจเชพเชจเชพ เชตเซ‡เชฌ เชฎเชเชฒ เชธเซเชงเซ€. เชตเซ‡เชฌ เชˆเชจเซเชŸเชฐเชซเซ‡เชธ เช…เชจเซเช•เซ‚เชณ, เชธเช‚เช•เซเชทเชฟเชชเซเชค เช›เซ‡, เช•เซ‹เชกเชฎเชพเช‚ เชฒเซ€เชŸเซ€เช“เชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชธเช‚เช•เซ‡เชคเซ‹ เช…เชจเซ‡ เชกเชพเชฏเช—เซเชจเซ‹เชธเซเชŸเชฟเช• เชตเชฐเซเชฃเชจเซ‹เชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชธเชพเชฅเซ‡.

เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชฎเชพเช‚ เชธเชฐเชณ เชเช•เซ€เช•เชฐเชฃ

เชฌเชงเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชคเซ‡เชฎเชจเซ€ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐ เช›เซ‡, เชนเซเช‚ เชซเช•เซเชค เชเชŸเชฒเซเช‚ เชœ เช•เชนเซ€ เชถเช•เซเช‚ เช›เซเช‚ เช•เซ‡ เชœเซ‹ เชคเชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ€เชฎเซ‡เช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เชฌเชงเซเช‚ เช–เซ‚เชฌ เชธเชฐเชณ เช›เซ‡.

เชธเชพเชฐเชพ เชกเชพเชฏเช—เซเชจเซ‹เชธเซเชŸเชฟเช• เชตเชฐเซเชฃเชจเซ‹

เชœเซ‹ เชคเชฎเซ‡ เชฎเซ‹เชกเชฎเชพเช‚ เช†เช‰เชŸเชชเซเชŸ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‹ เช›เซ‹ 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.

เช–เซ‚เชฌ เชœ เชงเซ€เชฎเซ€ เชธเชพเช‡เชŸ

เชนเชพ, เชฆเชฐเซ‡เช• เชธเช‚เชฆเซ‡เชถเชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชตเซ‡เชฌ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชกเชพเชฏเช—เซเชจเซ‹เชธเซเชŸเชฟเช• เชตเชฐเซเชฃเชจเชจเซ€ เชฒเชฟเช‚เช• เช›เซ‡. เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เช•เซ‹เชˆ เชฒเชฟเช‚เช• เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เช–เซ‚เชฌ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฐเชพเชน เชœเซ‹เชตเซ€ เชชเชกเซ‡ เช›เซ‡, เช…เชจเซ‡ เช•เซเชฏเชพเชฐเซ‡เช• เชคเซ‡ เชฅเชพเชฏ เช›เซ‡ 504 เช—เซ‡เชŸเชตเซ‡ เชŸเชพเชˆเชฎ-เช†เช‰เชŸ.

เชญเชพเชทเชพ

เชฌเชงเชพ เชตเชฐเซเชฃเชจเซ‹ เชฐเชถเชฟเชฏเชจเชฎเชพเช‚ เช›เซ‡, เชœเซ‡ เชฎเชนเชพเชจ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชนเซ‡เชตเชพเชฒเชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชนเช‚เชฎเซ‡เชถเชพ เช…เช‚เช—เซเชฐเซ‡เชœเซ€ เชธเช‚เชธเซเช•เชฐเชฃ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡. เชญเชพเชทเชพเชจเซ‡ เชธเซเชตเชฟเชš เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชฅเชตเซเช‚ เชธเชฐเชธ เชฐเชนเซ‡เชถเซ‡ เชœเซ‡เชฅเซ€ เชคเชฎเซ‡ เชคเชฐเชค เชœ เชฐเชถเชฟเชฏเชจเชฎเชพเช‚ เชกเชพเชฏเช—เซเชจเซ‹เชธเซเชŸเชฟเช•เซเชธ เชœเซ‹เชˆ เชถเช•เซ‹. เชฎเชจเซ‡ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เช†เชตเซ‹ เชตเชฟเช•เชฒเซเชช เชฎเชณเซเชฏเซ‹ เชจเชฅเซ€.

เช•เชจเซเชธเซ‹เชฒ เชฆเซเชตเชพเชฐเชพ เชกเชพเชฏเช—เซเชจเซ‹เชธเซเชŸเชฟเช• เชธเซเชคเชฐเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เช›เซ‡

เชšเชพเชฒเซ‹ เช เชนเช•เซ€เช•เชคเชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช เช•เซ‡ เชฌเซ‡ เช†เชฆเซ‡เชถเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ (เช† 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

เช•เซ‡เชŸเชฒเชพเช• "เชธเซเชคเชฐเซ‹" เช…เชนเซ€เช‚ เชฆเซ‡เช–เชพเชฏเชพ เชœเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชคเซเชฏเชพเช‚ เชจ เชนเชคเชพ, เช…เชจเซ‡ เชฎเชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชฎเชพเช‚ เชชเชฃ เชคเซ‡เชฎเชจเชพ เชตเชฟเชถเซ‡ เช•เช‚เชˆเชชเชฃ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเซ‡ เชธเซเชชเชทเซเชŸ เชจเชฅเซ€. เชคเซ‡เชฅเซ€ เชœ เชฎเซ‡เช‚ เชฌเชงเซเช‚ เชฎเชนเชคเซเชคเชฎ เชชเชฐ เชธเซ‡เชŸ เช•เชฐเซเชฏเซเช‚ เช›เซ‡.

เช•เซ‡เชš เชชเชฐ เชฎเซ‚เชฐเซเช– เชถเชชเชฅ เชฒเซ‡เชตเชพเชจเซ‹ เชธเชฎเซ‚เชน

เชฎเซ‡เช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ‡เชฒ เชคเซเชฐเชฃ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚เชฅเซ€ เชฌเซ‡ เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃ เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡เชš2. เช…เชจเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ‹ เชธเชฟเช‚เชนเชซเชพเชณเซ‹ (!!! เชเช•เชฎเชพเช‚ 90 เชฎเชพเช‚เชฅเซ€ 138 เช…เชจเซ‡ เชฌเซ€เชœเชพเชฎเชพเช‚ 297 เชฎเชพเช‚เชฅเซ€ 344!!!) เชจเซ€เชšเซ‡เชจเซเช‚ เชธเซเชตเชฐเซ‚เชช เชงเชฐเชพเชตเซ‡ เช›เซ‡:

PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹เชจเซ€ เชธเซเชตเชคเช‚เชคเซเชฐ เชธเชฎเซ€เช•เซเชทเชพ (Linux, C++)

เชฎเชฒเซเชŸเชฟเชฅเซเชฐเซ‡เชกเชฟเช‚เช—เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชคเซเช‚ เชจเชฅเซ€

เช…เชชเชฐเชฟเชตเชฐเซเชคเชจเชถเซ€เชฒ เชšเชฒ เช…เชฅเชตเชพ เช…เชจเช‚เชค เชฒเซ‚เชชเซเชธ เชตเชฟเชถเซ‡ เช˜เชฃเชพ เช–เซ‹เชŸเชพ เชนเช•เชพเชฐเชพเชคเซเชฎเช• เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เช† เชšเชฒเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช…เชฒเช—-เช…เชฒเช— เชฅเซเชฐเซ‡เชกเซ‹เชฎเชพเช‚เชฅเซ€ เชฅเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เชœเซ‹ เช†เชตเซเช‚ เชจ เชนเซ‹เชค, เชคเซ‹ เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚.

PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹เชจเซ€ เชธเซเชตเชคเช‚เชคเซเชฐ เชธเชฎเซ€เช•เซเชทเชพ (Linux, C++)

เชœเซ‹ เช•เซ‡, เชถเซเช‚ เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชชเชฃ เช†เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆ เชถเช•เซ‡ เช›เซ‡? เช–เชฌเชฐ เชจเชฅเซ€.

เชชเชฐเชฟเชฃเชพเชฎเซ‹

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 เช…เชจเซ‡ เชฌเซ‚เชธเซเชŸ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชชเชฐ เชเช• เชจเชœเชฐ เชจเชพเช–เซ‹. เชฆเซเชฐเซเชฒเชญ เช…เชชเชตเชพเชฆเซ‹ เชธเชพเชฅเซ‡, เชคเชฎเซ‡ เชคเซเชฏเชพเช‚ เชเช• เชฏเซ‹เช—เซเชฏ เชฐเซ‹เชฒ เชฎเซ‹เชกเซ‡เชฒ เชœเซ‹เชถเซ‹.

เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชŸเซ‚เชฒเซเชธเชจเซ‹ เชฎเชนเชคเซเชคเชฎ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹

เชธเชฎเชพเชจ เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชŸเซ‡, เชคเซเชฏเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชฌเซ‡ เช–เซเชฒเซเชฒเชพ เชฎเชซเชค เชธเชพเชงเชจเซ‹ เช›เซ‡ เชœเซ‡ CMake เชฌเชฟเชฒเซเชก เชธเชฟเชธเซเชŸเชฎ เชธเชพเชฅเซ‡ เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡ เชซเช•เซเชค เชเช• เชœ เชตเชพเชฐ เช•เชจเซ‡เช•เซเชŸ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.

เชคเชฎเซ‡ เชฎเชพเชฐเชพ เชคเชพเชœเซ‡เชคเชฐเชจเชพ เชชเซเชฐเช•เชพเชถเชจเชฎเชพเช‚ เช† เชตเชฟเชถเซ‡ เชตเชงเซ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹.

เช‰เชšเซเชšเชพเชฐเชฃ

เช…เช‚เชคเซ‡, เชนเซเช‚ เชญเชพเชฐเชชเซ‚เชฐเซเชตเช• เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชนเซเช‚ PVS เช…เชฅเชตเชพ เช…เชจเซเชฏ เช•เซ‹เชˆเชชเชฃ เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจ เช•เชฐเชตเชพเชจเซ€ เชนเชฟเชฎเชพเชฏเชค เช•เชฐเชคเซ‹ เชจเชฅเซ€. เชชเชฐเช‚เชคเซ เชนเซเช‚ เชคเชฎเชจเซ‡ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเซเชฏเซเช‚ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เชคเซเชธเชพเชนเชฟเชค เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชธเซเชŸเซ‡เชŸเชฟเช• เชตเชฟเชถเซเชฒเซ‡เชทเช• เชธเชคเชค เชคเชฎเชพเชฐเชพ เช•เซ‹เชกเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชญเซ‚เชฒเซ‹ เชถเซ‹เชงเซ‡ เช›เซ‡.

เช† เชฎเชพเชคเซเชฐ เชเช• เชชเชฐเชฟเชฃเชพเชฎ เช›เซ‡. เช†เชชเชฃเซ‡ เช•เชพเชฐเชฃ เชถเซ‹เชงเชตเชพเชจเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹