เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเดŸเต† เดธเตเดตเดคเดจเตเดคเตเดฐ เด…เดตเดฒเต‹เด•เดจเด‚ (เดฒเดฟเดจเด•เตเดธเต, เดธเดฟ++)

เดฒเดฟเดจเด•เตเดธเดฟเดจเต เด•เต€เดดเดฟเตฝ เดชเดฟเดตเดฟเดŽเดธเต เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เดชเด เดฟเดšเตเดš เด’เดฐเต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด‚ เดžเดพเตป เด•เดฃเตเดŸเต, เด…เดคเต เดŽเดจเตเดฑเต† เดธเตเดตเดจเตเดคเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฑเดคเตเดคเตเดตเดจเตเดจเดคเตเด‚ เด‡เดคเดพเดฃเต.


เด‰เดณเตเดณเดŸเด•เตเด•เด‚

  1. เดชเตเดฒเดฟ
  2. ะœะธะฝัƒัั‹
  3. เดซเดฒเด™เตเด™เตพ
  4. Afterword

เดชเตเดฒเดฟ

เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเดฟเดจเตเดคเตเดฃ

เดžเดพเตป เด’เดฐเต เดŸเตเดฐเดฏเตฝ เด•เต€ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเดšเตเดšเต, เด…เดตเตผ เด…เดคเต เด…เดคเต‡ เดฆเดฟเดตเดธเด‚ เดŽเดจเดฟเด•เตเด•เต เด…เดฏเดšเตเดšเต.

เดธเดพเดฎเดพเดจเตเดฏเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป

เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเดพเดคเต† เด…เดจเดฒเตˆเดธเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดžเตเดžเต. เด•เตบเดธเต‹เตพ เด•เดฎเดพเตปเดกเตเด•เตพเด•เตเด•เตเดณเตเดณ เดธเดนเดพเดฏเดตเตเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต (เด‡เดตเดฟเดŸเต† เดšเดฟเดฒ เดชเดฐเดพเดคเดฟเด•เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เดตเดฟเดญเดพเด—เด‚ เด•เดพเดฃเตเด• ะœะธะฝัƒัั‹).

เดฎเตพเดŸเตเดŸเดฟ-เดคเตเดฐเต†เดกเดกเต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเดพเดงเตเดฏเดค

เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เด’เดฐเต "เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต" เด“เดชเตเดทเตป เด‰เดฃเตเดŸเต -j, เดจเดฟเดฐเดตเดงเดฟ เดœเต‹เดฒเดฟเด•เดณเดฟเตฝ เดธเดฎเดพเดจเตเดคเดฐเดฎเดพเดฏเดฟ เดตเดฟเดถเด•เดฒเดจเด‚ เดจเดŸเดคเตเดคเดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดงเดพเดฐเดพเดณเด‚ เดธเดฎเดฏเด‚ เดฒเดพเดญเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฒเตเดฒ เดฆเตƒเดถเตเดฏเดตเตฝเด•เตเด•เดฐเดฃเด‚

เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดฎเตเดคเตฝ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดตเต†เดฌเต เดฎเต‚เด•เตเด•เต เดตเดฐเต† เดจเดฟเดฐเดตเดงเดฟ เดตเตเดฏเดคเตเดฏเดธเตเดค เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เตพ. เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดตเตเด‚ เดธเด‚เด•เตเดทเดฟเดชเตเดคเดตเตเดฎเดพเดฃเต, เด•เต‹เดกเดฟเดฒเต† เดตเดฐเดฟเด•เตพเด•เตเด•เต เด…เดŸเตเดคเตเดคเตเดณเตเดณ เดธเต‚เดšเดจเด•เดณเตเด‚ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เต เดตเดฟเดตเดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เตเด•เดณเตเด‚ เด‰เดฃเตเดŸเต.

เด…เดธเด‚เดฌเตเดฒเดฟเดฏเดฟเตฝ เดŽเดณเตเดชเตเดชเดฎเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚

เดŽเดฒเตเดฒเดพ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเด‚ เด…เดตเดฐเตเดŸเต† เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเดฟเตฝ เด‰เดฃเตเดŸเต, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต CMake เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดคเต†เด™เตเด•เดฟเตฝ, เดŽเดฒเตเดฒเดพเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต†เดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเต‡ เดŽเดจเดฟเด•เตเด•เต เดชเดฑเดฏเดพเตป เด•เดดเดฟเดฏเต‚.

เดจเดฒเตเดฒ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เต เดตเดฟเดตเดฐเดฃเด™เตเด™เตพ

เดจเดฟเด™เตเด™เตพ เดฎเต‹เดกเดฟเตฝ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ fullhtml, เดคเตเดŸเตผเดจเตเดจเต เด“เดฐเต‹ เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเด‚ เด’เดฐเต เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เต เดตเดฟเดตเดฐเดฃเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดฒเดฟเด™เตเด•เต เด‰เดฃเตเดŸเต, เดตเดฟเดถเดฆเต€เด•เดฐเดฃเด™เตเด™เดณเตเด‚ เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเด‚ เด…เดงเดฟเด• เดฒเดฟเด™เตเด•เตเด•เดณเตเด‚.

ะœะธะฝัƒัั‹

เด…เดจเดฒเตˆเดธเตผ เดธเดฟ++ เดญเดพเดทเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดœเตเดžเดค

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, 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, เด…เดคเดฟเดจเดพเดฃเต เด•เดพเดฐเต. เดŽเดจเตเดจเดพเตฝ เดชเดฟเดตเดฟเดŽเดธเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดจเตฝเด•เดฟ:

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

เด…เดชเตเดชเต‹เดดเดพเดฃเต เดŽเดจเดฟเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเดฏเดคเต เด‡เดต เดฌเดฟเดฑเตเดฑเต เดฎเดพเดธเตเด•เตเด•เดณเดพเดฃเต†เดจเตเดจเต! เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดฃเตเดŸเต เดธเด‚เด—เตเดฐเดนเด‚เดชเด•เตเดทเต‡ เด‡เดฒเตเดฒ เดšเต‡เตผเด•เตเด•เตเด• เด…เตผเดคเตเดฅเด™เตเด™เตพ. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเตŠเดคเตเดตเดพเดฏ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเต, เดฎเตˆเด•เตเดฐเต‹ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเด•เตพเด•เตเด•เตเดณเตเดณ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเต, เดฎเดฟเดธเตเดฐ เดŽเดจเตเดจเดฟเดต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด…เดต เดธเด‚เด—เตเดฐเดนเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต (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

เดฎเตเดฎเตเดชเต เด‡เดฒเตเดฒเดพเดคเดฟเดฐเตเดจเตเดจ เดšเดฟเดฒ "เดฒเต†เดตเดฒเตเด•เตพ" เด‡เดตเดฟเดŸเต† เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต, เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เด…เดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดจเตเดจเตเด‚ เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ.

เดชเตŠเดคเตเดตเต‡, เด…เดคเต เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒ. เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดžเดพเตป เดŽเดฒเตเดฒเดพเด‚ เดชเดฐเดฎเดพเดตเดงเดฟ เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟเดฏเดคเต.

เด•เตเดฏเดพเดšเตเดšเดฟเตฝ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดฎเดฃเตเดŸเดคเตเดคเดฐเด™เตเด™เตพ

เดžเดพเตป เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดค เดฎเต‚เดจเตเดจเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ เดฐเดฃเตเดŸเต†เดฃเตเดฃเด‚ เด’เดฐเต เดฏเต‚เดฃเดฟเดฑเตเดฑเต เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดฒเตˆเดฌเตเดฐเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต Catch2. เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเตเดŸเต† เดธเดฟเด‚เดนเดญเดพเด—เดตเตเด‚ (!!! เด’เดจเตเดจเดฟเตฝ 90 เตฝ 138 เด‰เด‚ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ 297 เตฝ 344 เด‰เด‚!!!) เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดซเต‹เด‚ เด‰เดฃเตเดŸเต:

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเดŸเต† เดธเตเดตเดคเดจเตเดคเตเดฐ เด…เดตเดฒเต‹เด•เดจเด‚ (เดฒเดฟเดจเด•เตเดธเต, เดธเดฟ++)

เดฎเตพเดŸเตเดŸเดฟเดคเตเดฐเต†เดกเดฟเด‚เด—เต เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ

เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต‹ เด…เดจเดจเตเดคเดฎเดพเดฏ เดฒเต‚เดชเตเดชเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต‹ เดงเดพเดฐเดพเดณเด‚ เดคเต†เดฑเตเดฑเดพเดฏ เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเตเด•เตพ เด‰เดฃเตเดŸเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เดˆ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดคเตเดฐเต†เดกเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต, เด‡เดคเต เด…เด™เตเด™เดจเต†เดฏเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฏเต‚เดฃเดฟเดฑเตเดฑเต เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฟเดฒเตเดฒ.

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเดŸเต† เดธเตเดตเดคเดจเตเดคเตเดฐ เด…เดตเดฒเต‹เด•เดจเด‚ (เดฒเดฟเดจเด•เตเดธเต, เดธเดฟ++)

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เด‡เดคเต เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต‹? เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ.

เดซเดฒเด™เตเด™เตพ

เดŽเดจเตเดฑเต† เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ PVS เดฏเดฅเดพเตผเดคเตเดฅ เดฌเด—เตเด•เดณเตŠเดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ เดฌเดดเตเดธเตเดฑเตเดฑเต ะธ เดชเตเดฐเต‹เด•เตเดธเดฟเดฎ, เด…เดคเตเดชเต‹เดฒเต† เด’เดฐเต เดตเตผเด•เตเด•เดฟเด‚เด—เต เดกเตเดฐเดพเดซเตเดฑเตเดฑเดฟเตฝ, เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด•เดพเดฐเดฃเด™เตเด™เดณเดพเตฝ, เดŽเดจเดฟเด•เตเด•เต เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ. เดถเดฐเดฟเดฏเดพเดฃเต, เดšเดฟเดฒ เดชเต‹เดฐเดพเดฏเตเดฎเด•เตพ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดชเดฟเดŸเดฟเด•เต‚เดŸเดฟ เดจเต‡เดฐเดคเตเดคเต† เดคเดจเตเดจเต† เดถเดฐเดฟเดฏเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต เดŽเดจเตเดจเดคเต เด“เตผเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต Cppcheck ะธ 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

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เด…เดต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดงเดพเดฐเดพเดณเด‚ เดชเด เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•.

เดจเดฟเดฒเดตเดพเดฐเด‚ เดชเตเดฒเตผเดคเตเดคเตเด•

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด…เดจเดฒเต‹เด—เตเด•เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เด‚-เด†เดถเตเดฐเดฟเดค เด•เดพเดฐเตเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•, เด…เดต เด•เต‚เดŸเดพเดคเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดตเดฏเต† เดฎเดพเด•เตเดฐเต‹เด•เตพเด•เตเด•เดพเดฏเดฟ (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต†เดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚) เดชเตเดฐเดคเตเดฏเต‡เด• เดฌเตเดฒเต‹เด•เตเด•เตเด•เดณเดฟเตฝ เดชเตŠเดคเดฟเดฏเตเด•, เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เดฐเตเดคเต.

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด“เดชเตเดชเดฑเต‡เดทเตป เดธเต†เดฎเดพเดจเตเดฑเดฟเด•เตเดธเดฟเตฝ เด‰เดฑเดšเตเดšเตเดจเดฟเตฝเด•เตเด•เตเด•

เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตฝ เดธเด™เตเด•เดฒเดจเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด—เตเดฃเดจเด‚ เด—เตเดฃเดจเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เดซเด‚เด—เตโ€Œเดทเตป เด•เต‹เตพ เดซเด‚เด—เตโ€Œเดทเตป เด•เต‹เตพ เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เดชเด•เตผเดชเตเดชเต เดชเด•เตผเดชเตเดชเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เดฃเด‚, เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เดฃเด‚, เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด‡เดฑเตเดฑเดฑเต‡เดฑเตเดฑเดฑเดฟเดจเต เดชเตเดฐเดฎเต‹เดทเตป เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚ ++ เด’เดชเตเดชเด‚ dereferencing *. เด…เด™เตเด™เดจเต† เดชเดฒเดคเตเด‚.

เด†เดถเดฏเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต. เดฌเตˆเตปเดกเดฟเด‚เด—เต เด…เดฒเตเดฒเดพเดคเตเดค, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเด‚ เดตเดพเดฏเดจเด•เตเด•เดพเดฐเตเด‚ เด•เดพเดฃเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดฅเดพเดชเดฟเดค เด•เตบเดตเต†เตปเดทเดจเตเด•เดณเตเดฃเตเดŸเต. เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฐเต† เดฎเดฑเดฟเด•เดŸเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดฐเตเดคเต, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดจเดฟเด™เตเด™เตพ เดธเตเดตเดฏเด‚ เดฎเดฑเดฟเด•เดŸเด•เตเด•เตเด‚.

เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด•เต‹เดกเต เดŽเดดเตเดคเตเด•

เด’เดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดžเดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเดพเดฐเดฃ เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดพเดฃเต. เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดพเดธเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เดณเตเดŸเต†เดฏเตเด‚ เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เตพ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต, เดฎเดฑเตเดฑเต เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฌเต‚เดธเตเดฑเตเดฑเต) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดคเต เดตเดณเดฐเต† เด…เดญเดฟเด•เดพเดฎเตเดฏเดฎเดพเดฃเต.

STL, เดฌเต‚เดธเตเดฑเตเดฑเต เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เตพ เดจเต‹เด•เตเด•เดพเตป เดฎเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เด…เดชเต‚เตผเดตเดฎเดพเดฏ เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เดณเต‹เดŸเต†, เดฏเต‹เด—เตเดฏเดจเดพเดฏ เด’เดฐเต เดฑเต‹เตพ เดฎเต‹เดกเตฝ เดจเดฟเด™เตเด™เตพ เด…เดตเดฟเดŸเต† เด•เดพเดฃเตเด‚.

เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดŸเต‚เดณเตเด•เตพ เดชเดฐเดฎเดพเดตเดงเดฟ เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•

เด’เดฐเต‡ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ, CMake เดฌเดฟเตฝเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดเดคเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เตเด‚ เด’เดฐเต เดคเดตเดฃ เดฎเดพเดคเตเดฐเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดฐเดฃเตเดŸเต เด“เดชเตเดชเตบ เดซเตเดฐเต€ เดŸเต‚เดณเตเด•เดณเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดฃเตเดŸเต.

เดŽเดจเตเดฑเต† เดธเดฎเต€เดชเด•เดพเดฒ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚.

Afterword

เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ, PVS เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฐเตเดคเต†เดจเตเดจเต เดžเดพเตป เดตเดพเดฆเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เดจเตเดจเต เดŠเดจเตเดจเดฟเดชเตเดชเดฑเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเตผ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเดฟเตฝ เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดชเดฟเดถเด•เตเด•เตพ เดจเดฟเดฐเดจเตเดคเดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเต เดŽเด™เตเด™เดจเต†เดฏเต†เดจเตเดจเต เดšเดฟเดจเตเดคเดฟเด•เตเด•เดพเตป เดžเดพเตป เดจเดฟเด™เตเด™เดณเต† เดชเตเดฐเต‹เดคเตเดธเดพเดนเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดคเตŠเดฐเต เด…เดจเดจเตเดคเดฐเดซเดฒเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต. เด•เดพเดฐเดฃเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•