PVS-Studio рдХреЛ рд╕реНрд╡рддрдиреНрддреНрд░ рд╕рдореАрдХреНрд╖рд╛ (Linux, C++)

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


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

  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режXNUMX рдЧреЗрдЯрд╡реЗ рдЯрд╛рдЗрдо-рдЖрдЙрдЯ.

рднрд╛рд╖рд╛

рд╕рдмреИ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рд░реВрд╕реАрдорд╛ рдЫрдиреН, рдЬреБрди рдЙрддреНрдХреГрд╖реНрдЯ рдЫред рддрд░ рд░рд┐рдкреЛрд░реНрдЯрдмрд╛рдЯ рд▓рд┐рдЩреНрдХрд╣рд░реВ рд╕рдзреИрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдЬрд╛рдиреНрдЫрдиреНред рдпреЛ рднрд╛рд╖рд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗрдЫ рддрд╛рдХрд┐ рддрдкрд╛рдИрдВ рд░реВрд╕реАрдорд╛ рддреБрд░реБрдиреНрддреИ рдирд┐рджрд╛рдирд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдореИрд▓реЗ рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рдпрд╕реНрддреЛ рд╡рд┐рдХрд▓реНрдк рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдиред

рдХрдиреНрд╕реЛрд▓ рдорд╛рд░реНрдлрдд рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕реНрддрд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ

рдпрд╕ рддрдереНрдпрдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░реМрдВ рдХрд┐ рджреБрдИ рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдпреЛ (рдпреЛ 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 рдХреЛ рд╕реНрд╡рддрдиреНрддреНрд░ рд╕рдореАрдХреНрд╖рд╛ (Linux, C++)

рдорд▓реНрдЯрд┐рдереНрд░реЗрдбрд┐рдЩрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИрди

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

PVS-Studio рдХреЛ рд╕реНрд╡рддрдиреНрддреНрд░ рд╕рдореАрдХреНрд╖рд╛ (Linux, C++)

рдпрджреНрдпрдкрд┐, рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд▓реЗ рдкрдирд┐ рдпрд╕рд▓рд╛рдИ рдЦрд╛рддрд╛рдорд╛ рд▓рд┐рди рд╕рдХреНрдЫ? рдерд╛рд╣рд╛ рдЫреИрдиред

рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

PVS рд▓реЗ рдореЗрд░реЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдХреБрдиреИ рдкрдирд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрди рдлреБрдЯреНрдЫ ╨╕ рдкреНрд░реЛрдХреНрд╕реАрдорд╛, рд╕рд╛рдереИ рдХрд╛рд░реНрдп рдорд╕реНрдпреМрджрд╛рдорд╛, рдЬреБрди, рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рдо рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрди рд╕рдХреНрджрд┐рдиред рд╕рд╛рдБрдЪреЛ, рдпреЛ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рдХреЗрд╣рд┐ рдХрдордЬреЛрд░реАрд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрдХреНрд░рд┐рдПрдХреЛ рдЫ рд░ рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдЫ Cppcheck ╨╕ scan-build.

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпреА рд╕рдмреИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╣рд░реВрдмрд╛рдЯ рдЫрд╛рдк рд▓рдЧрднрдЧ рд╕рдорд╛рди рдЫ: рд╣реЛ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдХреЗрд╣рд┐ рд╕рдорд╛рддреНрдЫрдиреН, рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдХреЗрд╣рд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдкрдирд┐, рддрд░ рд╕рдордЧреНрд░рдорд╛ рдХрдореНрдкрд╛рдЗрд▓рд░ рдкрд░реНрдпрд╛рдкреНрдд рдЫред

рдпреЛ рд╕рдореНрднрд╡ рдЫ (рд░ рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рдЪрд╛рд╣рдиреНрдЫреБ) рдХрд┐ рд╣рд╛рдореНрд░реЛ рдЯреЛрд▓реАрд▓реЗ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдЕрднреНрдпрд╛рд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдиреНрдпреВрдирддрдо рдорд╛рддреНрд░рд╛рдорд╛ shitty рдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╡реАрд░рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдирдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реЛред

рддрд╕рд░реНрде, рдХрд╕реИрдХреЛ рдЦреБрдЯреНрдЯрд╛рдорд╛ рдЧреЛрд▓реА рд╣рд╛рдиреНрди рд╡рд╛ рдХрд╕реИрдХреЛ рдирд┐рдзрд╛рд░рдорд╛ рд░реНрдпрд╛рдХрд▓реЗ рдкреНрд░рд╣рд╛рд░ рдирдЧрд░реНрдиреЗ рдЧрд░реА 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди