рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ (рд▓рд┐рдирдХреНрд╕, рд╕реА++) рдХреА рд╕реНрд╡рддрдВрддреНрд░ рд╕рдореАрдХреНрд╖рд╛

рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдХрд╛рд╢рди рджреЗрдЦрд╛ рдХрд┐ рдкреАрд╡реАрдПрд╕ рдиреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╕реАрдЦрд╛ рдерд╛, рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдФрд░ рдЙрд╕рд╕реЗ рдпрд╣реА рдирд┐рдХрд▓рд╛.


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

  1. рдкреЗрд╢реЗрд╡рд░реЛрдВ
  2. рд╡рд┐рдкрдХреНрд╖
  3. рдкрд░рд┐рдгрд╛рдо
  4. рдЕрдВрддрднрд╛рд╖рдг

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рдЙрддреНрддрд░рджрд╛рдпреА рд╕рдорд░реНрдерди

рдореИрдВрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдЙрд╕реА рджрд┐рди рдореБрдЭреЗ рднреЗрдЬ рджрд┐рдпрд╛ред

рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

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

рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд╛рд╕ рдПрдХ "рдорд╛рдирдХ" рд╡рд┐рдХрд▓реНрдк рд╣реИ -j, рдЬрд┐рд╕рд╕реЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рд╕реЗ рд╕рдордп рдХреА рдХрд╛рдлреА рдмрдЪрдд рд╣реЛрддреА рд╣реИ.

рдЕрдЪреНрдЫрд╛ рджреГрд╢реНрдпрд╛рд╡рд▓реЛрдХрди

рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рд▓реЗрдХрд░ рдЫреЛрдЯреЗ рд╡реЗрдм рдереВрдерди рддрдХ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкред рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдХреЛрдб рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕рдВрдХреЗрдд рдФрд░ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВ.

рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЖрд╕рд╛рди рдПрдХреАрдХрд░рдг

рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдирдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╣реИрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрджрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ CMake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдЕрдЪреНрдЫрд╛ рдирд┐рджрд╛рди рд╡рд┐рд╡рд░рдг

рдпрджрд┐ рдЖрдк рдореЛрдб рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ fullhtml, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИред

рд╡рд┐рдкрдХреНрд╖

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ C++ рднрд╛рд╖рд╛ рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреАрд╡реАрдПрд╕ рдХрднреА-рдХрднреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ 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

рдФрд░ рддрднреА рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпреЗ рдмрд┐рдЯ рдорд╛рд╕реНрдХ рдереЗ! рдФрд░ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдирд╛рдФрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВ рдЕрд░реНрде. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рдирд┐рджрд╛рди, рд╕реВрдХреНрд╖реНрдо-рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдирд┐рджрд╛рди рдФрд░ 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!!!) рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ (рд▓рд┐рдирдХреНрд╕, рд╕реА++) рдХреА рд╕реНрд╡рддрдВрддреНрд░ рд╕рдореАрдХреНрд╖рд╛

рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛

рдХрдерд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЪрд░ рдпрд╛ рдЕрдВрддрд╣реАрди рд▓реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрд╛рддреЗрдВ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЗрди рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдб рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛, рддреЛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ (рд▓рд┐рдирдХреНрд╕, рд╕реА++) рдХреА рд╕реНрд╡рддрдВрддреНрд░ рд╕рдореАрдХреНрд╖рд╛

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрдпрд╛ рдХреЛрдИ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕реЗ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ? рдкрддрд╛ рдирд╣реАрдВред

рдкрд░рд┐рдгрд╛рдо

рдкреАрд╡реАрдПрд╕ рдХреЛ рдореЗрд░реЗ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдлрдЯ ╨╕ рдкреНрд░реЛрдХреНрд╕рд┐рдорд╛, рд╕рд╛рде рд╣реА рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдорд╕реМрджреЗ рдореЗрдВ, рдЬрд┐рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдореИрдВ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╕рдЪ рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рд╕реАрдкреАрдкреАрдЪреЗрдХ ╨╕ 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

рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЬрд╛рдиреЗрдВред

рдорд╛рдирдХ рдкрд░ рдЯрд┐рдХреЗ рд░рд╣реЗрдВ

рдпрджрд┐ рдорд╛рдирдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИрдВ рддреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЙрдирдХреЗ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ (рдпрд╛ рдХреБрдЫ рдФрд░) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдФрд░ рдмрд╕ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрд╕рдорд░реНрдерд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рди рд╣реЛрдиреЗ рджреЗрдВред

рдорд╛рдирдХ рд╕рдВрдЪрд╛рд▓рди рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдЯрд┐рдХреЗ рд░рд╣реЗрдВ

рдЬреЛрдбрд╝ рдХреЛ рдЬреЛрдбрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЧреБрдгрди рдХреЛ рдЧреБрдгрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЙрдкреА рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреИрд░реА рдХреЛ рдХреИрд░реА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХрдВрдЯреЗрдирд░ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддрдиреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрдЯрд░реЗрдЯрд░ рдХреЛ рдкреНрд░рдореЛрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ++ рдФрд░ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ *. рдФрд░ рдЗрддрдиреЗ рдкрд░ рдФрд░ рдЖрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ. рдРрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдкрд░рдВрдкрд░рд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкрд╛рдардХ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЛрдВ рдХреЛ рдорд╛рдд рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдордд рдХрд░реЛ, рдирд╣реАрдВ рддреЛ рддреБрдо рд╕реНрд╡рдпрдВ рд╣реА рдорд╛рдд рдЦрд╛ рдЬрд╛рдУрдЧреЗред

рд╕рдВрдЧрдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░рд╛ рдорддрд▓рдм рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╣реИред рдпрд╣ рдмреЗрд╣рдж рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдЖрдкрдХреА рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рдФрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреВрд╕реНрдЯ) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдмреЗрдЭрд┐рдЭрдХ рдПрд╕рдЯреАрдПрд▓ рдФрд░ рдмреВрд╕реНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рджреБрд░реНрд▓рдн рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдПрдХ рдпреЛрдЧреНрдп рд░реЛрд▓ рдореЙрдбрд▓ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдУрдкрди рд╕реЛрд░реНрд╕ рдЯреВрд▓ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдн рдЙрдард╛рдПрдВ

рд╕рдорд╛рди рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рджреЛ рдЦреБрд▓реЗ рдореБрдлрд╝реНрдд рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реАрдПрдордХреЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдореЗрд░реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ.

рдЕрдВрддрднрд╛рд╖рдг

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдкреАрд╡реАрдПрд╕ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреИрд╕реЗ рд╣реБрдЖ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рдЧрд╛рддрд╛рд░ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдвреВрдВрдврддрд╛ рд╣реИред

рдпрд╣ рддреЛ рдорд╣рдЬрд╝ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реИ. рд╣рдореЗрдВ рдХрд╛рд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреА рдФрд░ рдЙрд╕реЗ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ