рдкреАрд╡реНрд╣реАрдПрд╕-рд╕реНрдЯреБрдбрд┐рдУрдЪреЗ рд╕реНрд╡рддрдВрддреНрд░ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди (рд▓рд┐рдирдХреНрд╕, рд╕реА++)

рдореА рдПрдХ рдкреНрд░рдХрд╛рд╢рди рдкрд╛рд╣рд┐рд▓реЗ рдЬреЗ рдкреАрд╡реНрд╣реАрдПрд╕ рдиреЗ рд▓рд┐рдирдХреНрд╕ рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреЗ рд╢рд┐рдХрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╡рд░ рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдард░рд╡рд▓реЗ. рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рд╣реЗрдЪ тАЛтАЛрдкреБрдвреЗ рдЖрд▓реЗ.


рд╕рд╛рдордЧреНрд░реА

  1. ╨Я╨╗╤О╤Б╤Л
  2. рдорд┐рдирд┐рдиреНрд╕
  3. рдкрд░рд┐рдгрд╛рдо
  4. рдирдВрддрд░рдЪрд╛ рд╢рдмреНрдж

╨Я╨╗╤О╤Б╤Л

рдкреНрд░рддрд┐рд╕рд╛рджрд╛рддреНрдордХ рд╕рдорд░реНрдерди

рдореА рдЯреНрд░рд╛рдпрд▓ рдХреАрдЪреА рд╡рд┐рдирдВрддреА рдХреЗрд▓реА рдЖрдгрд┐ рддреНрдпрд╛рдВрдиреА рддреА рддреНрдпрд╛рдЪ рджрд┐рд╡рд╢реА рдорд▓рд╛ рдкрд╛рдард╡рд▓реА.

рдмрд▒реНрдпрд╛рдкреИрдХреА рд╕реНрдкрд╖реНрдЯ рджрд╕реНрддрдРрд╡рдЬ

рдЖрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдорд╕реНрдпреЗрд╢рд┐рд╡рд╛рдп рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ. рдХрдиреНрд╕реЛрд▓ рдХрдорд╛рдВрдбрд╕рд╛рдареА рдорджрдд рджреЗрдЦреАрд▓ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ (рдЬрд░реА рдпреЗрдереЗ рдХрд╛рд╣реА рддрдХреНрд░рд╛рд░реА рдЖрд╣реЗрдд, рд╡рд┐рднрд╛рдЧ рдкрд╣рд╛ рдорд┐рдирд┐рдиреНрд╕).

рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреА рд╢рдХреНрдпрддрд╛

рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдХрдбреЗ "рдорд╛рдирдХ" рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ -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.

рдЦреВрдк рд╣рд│реВ рд╕рд╛рдЗрдЯ

рд╣реЛрдп, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢рд╛рдкреБрдвреАрд▓ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рджрд╛рди рд╡рд░реНрдгрдирд╛рдЪреА рд▓рд┐рдВрдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдПрдЦрд╛рджреНрдпрд╛ рд▓рд┐рдВрдХрд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдмрд░рд╛рдЪ рд╡реЗрд│ рдерд╛рдВрдмрд╛рд╡реЗ рд▓рд╛рдЧрддреЗ рдЖрдгрд┐ рдХрдзреАрдХрдзреА рдЕрд╕реЗ рд╣реЛрддреЗ 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 рд▓рд╛ рдорд╛рдЭреНрдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдЖрдврд│рд▓реЗ рдирд╛рд╣реАрдд рдлреБрдЯрдгреЗ ╨╕ рдкреНрд░реЙрдХреНрд╕рд┐рдорд╛, рддрд╕реЗрдЪ рдХрд╛рд░реНрдпрд░рдд рдорд╕реБрджреНрдпрд╛рдд, рдЬреЗ, рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ, рдореА рд╕рд╛рджрд░ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдЦрд░реЗ рдЖрд╣реЗ, рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рдХрд╛рд╣реА рдЙрдгреАрд╡рд╛ рдЖрдзреАрдЪ рдкрдХрдбрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдкреВрд░реНрд╡реА рд╡рд╛рдкрд░реВрди рд╕реБрдзрд╛рд░рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд 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 рдЖрдгрд┐ рдмреВрд╕реНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рдореЛрдХрд│реНрдпрд╛ рдордирд╛рдиреЗ рдПрдХ рдирдЬрд░ рдЯрд╛рдХрд╛. рджреБрд░реНрдорд┐рд│ рдЕрдкрд╡рд╛рджрд╛рдВрд╕рд╣, рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗрдереЗ рдПрдХ рдпреЛрдЧреНрдп рдЖрджрд░реНрд╢ рджрд┐рд╕реЗрд▓.

рдореБрдХреНрдд рд╕реНрд░реЛрдд рд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд╡рд╛рдкрд░ рдХрд░рд╛

рддреНрдпрд╛рдЪ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА, рдХрд┐рдорд╛рди рджреЛрди рдЦреБрд▓реА рд╡рд┐рдирд╛рдореВрд▓реНрдп рд╕рд╛рдзрдиреЗ рдЖрд╣реЗрдд рдЬреА CMake рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд▓реНрдкрд╛рд╢реА рдПрдХрджрд╛рдЪ рдЬреЛрдбрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЖрдкрдг рдорд╛рдЭреНрдпрд╛ рдЕрд▓реАрдХрдбреАрд▓ рдкреНрд░рдХрд╛рд╢рдирд╛рдд рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛.

рдирдВрддрд░рдЪрд╛ рд╢рдмреНрдж

рд╢реЗрд╡рдЯреА, рдореА рдпрд╛рд╡рд░ рдЬреЛрд░ рджреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рдореА PVS рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгрддреЗрд╣реА рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрдд рдирд╛рд╣реА. рдкрд░рдВрддреБ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЖрдкрд▓реНрдпрд╛ рдХреЛрдбрдордзреНрдпреЗ рд╕рддрдд рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯреА рд╢реЛрдзрдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдХрд╕реЗ рдШрдбрд▓реЗ рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЛ.

рд╣рд╛ рдлрдХреНрдд рдПрдХ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗ. рдЖрдкрдг рдХрд╛рд░рдг рд╢реЛрдзрдгреЗ рдЖрдгрд┐ рджреВрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛