ืคืจื™ื™ึท ืจืขืฆืขื ื–ื™ืข ืคื•ืŸ โ€‹โ€‹PVS-Studio (ืœื™ื ื•ืงืก, C ++)

ืื™ืš ื”ืึธื‘ ื’ืขื–ืขืŸ ืึท ื•ื™ืกื’ืึทื‘ืข ืึทื– PVS ื”ืื˜ ื’ืขืœืขืจื ื˜ ืฆื• ืึทื ืึทืœื™ื™ื– ืื•ื ื˜ืขืจ ืœื™ื ื•ืงืก, ืื•ืŸ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืขืก ืื•ื™ืฃ ืžื™ื™ืŸ ืื™ื™ื’ืขื ืข ืคึผืจืึทื“ื–ืฉืขืงืก. ืื•ืŸ ื“ืืก ืื™ื– ื“ืขืจืคื•ืŸ ืืจื•ื™ืกื’ืขืงื•ืžืขืŸ.


ืฆื•ืคืจื™ื“ืŸ

  1. ืคึผืจืึธืก
  2. ืงืึธื ืก
  3. ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ
  4. ืึทืคื˜ืขืจื•ื•ืึธืจื“

ืคึผืจืึธืก

ืึธืคึผืจื•ืคื™ืง ืฉื˜ื™ืฆืŸ

ืื™ืš ื”ืื‘ ื’ืขื‘ืขื˜ืŸ ื ืคืจืืฆืขืก ืฉืœื™ืกืœ ืื•ืŸ ืžืขืŸ ื”ืื˜ ืขืก ืžื™ืจ ื’ืขืฉื™ืงื˜ ื“ืขื ื–ืขืœื‘ืŸ ื˜ืื’.

ื’ืึทื ืฅ ืงืœืึธืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ

ืžื™ืจ ื’ืขืจืื˜ืŸ ืฆื• ืงืึทื˜ืขืจ ื“ื™ ืึทื ืึทืœื™ื–ืขืจ ืึธืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ. ื”ื™ืœืฃ ืคึฟืึทืจ ืงืึทื ืกืึธื•ืœ ืงืึทืžืึทื ื“ื– ืื™ื– ืื•ื™ืš ื‘ื ื™ืžืฆื (ื›ืึธื˜ืฉ ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ื˜ืขื ื•ืช ื“ืึธ, ื–ืขืŸ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืงืึธื ืก).

ืžืขื’ืœืขื›ืงื™ื™ื˜ ืคื•ืŸ ืžื•ืœื˜ื™-ื˜ืจืขื“ื™ื“ ืึทื ืึทืœื™ืกื™ืก

ื“ื™ ืึทื ืึทืœื™ื–ืขืจ ื”ืื˜ ืึท "ื ืึธืจืžืึทืœ" ืึธืคึผืฆื™ืข -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.

ื–ื™ื™ืขืจ ืคึผืึทืžืขืœืขืš ืคึผืœืึทืฅ

ื™ืึธ, ืื™ืŸ ื“ื™ ื•ื•ืขื‘ ืฆื•ื‘ื™ื ื“ ืœืขื‘ืŸ ื™ืขื“ืขืจ ืึธื ื–ืึธื’ ืขืก ืื™ื– ืึท ืœื™ื ืง ืฆื• ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ื“ื™ืึทื’ื ืึธืกื˜ื™ืง ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืžื™ื˜ ื‘ื™ื™ืฉืคื™ืœืŸ. ืื‘ืขืจ ื•ื•ืขืŸ ืื™ืจ ืงืœื™ืงื˜ ืื•ื™ืฃ ืึท ืœื™ื ืง, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื•ื•ืึทืจื˜ืŸ ื’ืึทื ืฅ ืœืึทื ื’, ืื•ืŸ ืžืืœ ืขืก ื›ืึทืคึผืึทื ื– 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

ื“ืึธ ื”ืึธื‘ืŸ ื–ื™ืš ื‘ืึทื•ื•ื™ื–ืŸ ืขื˜ืœืขื›ืข "ืœืขื•ื•ืขืœืก" ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ื“ืึธืจื˜ ืคืจื™ืขืจ, ืื•ืŸ ืื™ืš ื”ืึธื‘ ืื•ื™ืš ื ื™ืฉื˜ ื’ืขืคึฟื•ื ืขืŸ ืขืคึผืขืก ื•ื•ืขื’ืŸ ื–ื™ื™ ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืขืก ืื™ื– ื ื™ืฉื˜ ืงืœืึธืจ. ืึทื– ืก ื•ื•ืึธืก ืื™ืš ืฉื˜ืขืœืŸ ืึทืœืฅ ืฆื• ื“ื™ ืžืึทืงืกื™ืžื•ื.

ื ื‘ื™ื ื˜ืœ ื ืืจื™ืฉืข ืฉืฐืขืจืŸ ืื•ื™ืฃ ืงืื˜ืฉ

ืฆื•ื•ื™ื™ ืคื•ืŸ ื“ื™ ื“ืจื™ื™ ืคึผืจืึทื“ื–ืฉืขืงืก ืื™ืš ืึทื ืึทืœื™ื™ื–ื“ ื ื•ืฆืŸ ืึท ืึทืคึผืึทืจืึทื˜ ื˜ืขืกื˜ื™ื ื’ ื‘ื™ื‘ืœื™ืึธื˜ืขืง Catch2. ืื•ืŸ ื“ื™ ืœื™ื™ื‘ ืก ื˜ื™ื™ืœืŸ ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ (!!! 90 ืคื•ืŸ 138 ืื™ืŸ ืื™ื™ืŸ ืื•ืŸ 297 ืคื•ืŸ 344 ืื™ืŸ ื“ื™ ืื ื“ืขืจืข!!!) ื”ืึธื‘ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคืึธืจืขื:

ืคืจื™ื™ึท ืจืขืฆืขื ื–ื™ืข ืคื•ืŸ โ€‹โ€‹PVS-Studio (ืœื™ื ื•ืงืก, C ++)

ื˜ื•ื˜ ื ื™ืฉื˜ ื ืขืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ืžื•ืœื˜ื™ื˜ื”ืจืขืึทื“ื™ื ื’

ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืคืึทืœืฉ ืคึผืึทื–ืึทื˜ื™ื•ื•ื– ื•ื•ืขื’ืŸ ืกืึทืคึผืึธื•ื–ืึทื“ืœื™ ืึทื ื˜ืฉื™ื™ื ื“ื–ืฉื™ื ื’ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืึธื“ืขืจ ืกืึธืฃ ืœื•ืคึผืก, ื‘ืฉืขืช ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืึทืงืขืจื– ืคึฟื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืคึฟืขื“ืขื, ืื•ืŸ ืื•ื™ื‘ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึทื–ื•ื™, ืึทืคึผืึทืจืึทื˜ ื˜ืขืกืฅ ื•ื•ืึธืœื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ.

ืคืจื™ื™ึท ืจืขืฆืขื ื–ื™ืข ืคื•ืŸ โ€‹โ€‹PVS-Studio (ืœื™ื ื•ืงืก, C ++)

ืึธื‘ืขืจ, ืงืขืŸ ืึท ืกื˜ืึทื˜ื™ืง ืึทื ืึทืœื™ื–ืขืจ ืืคื™ืœื• ื ืขืžืขืŸ ื“ืขื ืื™ืŸ ื—ืฉื‘ื•ืŸ? ื•ื•ื™ื™ืก ื ื™ืฉื˜.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

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

ื’ืขื‘ืŸ ื–ื™ื™ ืื™ืŸ ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ ืื•ืŸ ืœืขืจื ืขืŸ ืึท ืคึผืœืึทืฅ ื•ื•ืขื’ืŸ ื“ื™ื™ืŸ ืงืึธื“.

ืฉื˜ืขืงืŸ ืฆื• ื“ื™ ื ืึธืจืžืึทืœ

ืคึผืจื•ึผื•ื•ื˜ ื ื™ืฉื˜ ืฆื• ื ื•ืฆืŸ ืคึผืœืึทื˜ืคืึธืจืžืข-ืึธืคืขื ื’ื™ืง ื˜ื™ื ื’ื– ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ื ืึธืจืžืึทืœ ืึทื ืึทืœืึธื’ื•ืขืก, ืื•ืŸ ืื•ื™ื‘ ืื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ื˜ืึธืŸ ืึธืŸ ื–ื™ื™, ื™ื™ึทื ื•ื•ื™ืงืœืขืŸ ื–ื™ื™ ืื™ืŸ ืกืคึผืขืฆื™ืขืœ ื‘ืœืึทืงืก ืคึฟืึทืจ ืžืึทืงืจืึธืก (ืึธื“ืขืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ) ืื•ืŸ ืคืฉื•ื˜ ื˜ืึธืŸ ื ื™ื˜ ืœืึธื–ืŸ ื“ื™ื™ืŸ ืงืึธื“ ื–ื™ื™ืŸ ืงืึทืžืคึผื™ื™ืœื“ ืื•ื ื˜ืขืจ ืึทื ืกืึทืคึผืึธืจื˜ื™ื“ ื˜ื ืึธื™ื.

ืฉื˜ืขืงืŸ ืฆื• ื ืึธืจืžืึทืœ ืึธืคึผืขืจืึทืฆื™ืข ืกืขืžืึทื ื˜ื™ืงืก

ืึทื“ื™ืฉืึทืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืงื™ื™ืคืœ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืงื™ื™ืคืœ, ืคึฟื•ื ืงืฆื™ืข ืจื•ืคืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืคื•ื ืงืฆื™ืข ืจื•ืคืŸ, ืงืึธืคึผื™ืข ืžื•ื–ืŸ ื–ื™ื™ืŸ ืงืึธืคึผื™ืข, ืคื™ืจืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืคื™ืจืŸ, ืงืึทื ื˜ื™ื™ื ืขืจ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื™ื˜ืขืจืึทื‘ืึทืœ, ื™ื˜ืขืจืึทื˜ืึธืจ ืžื•ื–ืŸ ื”ืึธื‘ืŸ ื”ืขื›ืขืจื•ื ื’ ++ ืื•ืŸ ื“ืขืจืคืขืจืขื ืกื™ื ื’ *. ืื•ืŸ ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ ืื•ืŸ ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ.

ืื™ืš ืžื™ื™ืŸ ืื– ื“ืขืจ ื’ืขื“ืื ืง ืื™ื– ืงืœืืจ. ืขืก ื–ืขื ืขืŸ ื’ืขื’ืจื™ื ื“ืขื˜ ืงืึทื ื•ื•ืขื ืฉืึทื ื– ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ื™ื™ื ื“ื™ื ื’, ืึธื‘ืขืจ ืึทื– ืึทืœืข ื ื™ืฆืขืจืก ืื•ืŸ ืœื™ื™ืขื ืขืจ ืคื•ืŸ ื“ื™ื™ืŸ ืงืึธื“ ื“ืขืจื•ื•ืึทืจื˜ืŸ ืฆื• ื–ืขืŸ. ืคึผืจื•ึผื•ื•ื˜ ื ื™ืฉื˜ ืื•ื™ืกืฆื•ืœืขืจื ืขืŸ ืึทื ื“ืขืจืข, ืึทื ื“ืขืจืฉ ื•ื•ืขืกื˜ื• ื–ื™ืš ืื•ื™ืกืœืขืจื ืขืŸ.

ืฉืจื™ื™ื‘ ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืงืึธื“

ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืื™ืš ืžื™ื™ื ืขืŸ ื“ื™ ื ืึธืจืžืึทืœ ื‘ื™ื‘ืœื™ืึธื˜ืขืง. ืขืก ืื™ื– ื”ืขื›ืกื˜ ื“ื™ื–ื™ื™ืจืึทื‘ืึทืœ ืึทื– ื“ื™ ื™ื ื˜ืขืจืคื™ื™ืกื™ื– ืคื•ืŸ ื“ื™ื™ืŸ ืงืœืืกืŸ ืื•ืŸ ืคืึทื ื’ืงืฉืึทื ื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืžื™ื˜ ื ืึธืจืžืึทืœ ืื•ืŸ ืื ื“ืขืจืข ืœื™ื™ื‘ืจืขืจื™ื– (ืœืžืฉืœ ื‘ืึธืึธืกื˜).

ืคื™ืœืŸ ืคืจื™ื™ ืฆื• ื ืขืžืขืŸ ืึท ืงื•ืง ืื™ืŸ ื“ื™ STL ืื•ืŸ Boost ื™ื ื˜ืขืจืคื™ื™ืกื™ื–. ืžื™ื˜ ื–ืขืœื˜ืŸ ืื•ื™ืกื ืขืžืขืŸ, ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ืึท ื•ื•ืขืจื˜ ืจืึธืœืข ืžืึธื“ืขืœ ื“ืึธืจื˜.

ืžืึทื›ืŸ ื“ื™ ืžืขืจืกื˜ ืคื•ืŸ ืขืคึฟืขื ืขืŸ ืžืงื•ืจ ืžื›ืฉื™ืจื™ื

ืคึฟืึทืจ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืกื˜ืึทื˜ื™ืง ืึทื ืึทืœื™ืกื™ืก, ืขืก ื–ืขื ืขืŸ ืœืคึผื—ื•ืช ืฆื•ื•ื™ื™ ืึธืคึฟืŸ ืคืจื™ื™ ืžื›ืฉื™ืจื™ื ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึธื ื ืขืงื˜ืขื“ ื‘ืœื•ื™ื– ืึทืžืึธืœ ืฆื• ืงื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ ืžื™ื˜ ื“ื™ CMake ื‘ื•ื™ืขืŸ ืกื™ืกื˜ืขื.

ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ื“ืขื ืื™ืŸ ืžื™ื™ืŸ ืœืขืฆื˜ืข ื•ื™ืกื’ืึทื‘ืข.

ืึทืคื˜ืขืจื•ื•ืึธืจื“

ืฆื•ื ืกื•ืฃ, ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื•ื ื˜ืขืจืฉื˜ืจื™ื™ึทื›ืŸ ืึทื– ืื™ืš ื‘ื™ืŸ ื ื™ืฉื˜ ืึทื“ื•ื•ืึทืงื™ื™ื˜ื™ื ื’ ื ื™ืฉื˜ ืฆื• ื ื•ืฆืŸ PVS ืึธื“ืขืจ ืงื™ื™ืŸ ืื ื“ืขืจืข ืกื˜ืึทื˜ื™ืง ืึทื ืึทืœื™ื–ืขืจื–. ืึธื‘ืขืจ ืื™ืš ืžื•ื˜ื™ืงืŸ ืื™ืจ ืฆื• ื˜ืจืึทื›ื˜ืŸ ื•ื•ืขื’ืŸ ื•ื•ื™ ืขืก ื’ืขื˜ืจืืคืŸ ืึทื– ื“ื™ ืกื˜ืึทื˜ื™ืง ืึทื ืึทืœื™ื–ืขืจ ืงืขืกื™ื™ื“ืขืจ ื’ืขืคึฟื™ื ืขืŸ ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ืขืจืจืึธืจืก ืื™ืŸ ื“ื™ื™ืŸ ืงืึธื“.

ื“ืึธืก ืื™ื– ื ืึธืจ ืึท ืงืึทื ืกืึทืงื•ื•ืึทื ืก. ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงื•ืงืŸ ืคึฟืึทืจ ืื•ืŸ ืขืœื™ืžื™ื ื™ืจืŸ ื“ื™ ืกื™ื‘ื”.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’