Cppcheck рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C / C ++ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпрд╛рдБ

рдкрд┐рдЫрд▓реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ , рд╣рдордиреЗ cppcheck рдХреЗ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрд╛ред рдпрд╣ рдореВрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рднреА рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдкрдХреНрд╖ рд╕реЗ рдЦреБрдж рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣ рд▓реЗрдЦ рдореЗрдореЛрд░реА рд▓реАрдХ рдкрдХрдбрд╝рдиреЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдорд╛рдирджрдВрдб рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП cppcheck рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ред рдЖрдЬ "рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ" рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреЛрдИ рддреБрд▓рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдЦ рдкреВрд░реА рддрд░рд╣ рд╕реЗ cppcheck рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред

рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


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

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

рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдБ

рд▓рд┐рдирдХреНрд╕ рдкрд░ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ: рдбрд╛рдЙрдирд▓реЛрдб, рдЕрдирдЬрд╝рд┐рдк, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

unzip cppcheck-master.zip cd cppcheck-master make 

рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдБ

рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╡реАрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЦреЛрд▓реЛ, рдЗрдХрдЯреНрдард╛ рдХрд░реЛред рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдРрд╕реА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрдкрдЪреЗрдХ

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

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

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

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

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗрдЯрдЕрдк


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

рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдпрд╛ cppcheck --help рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ (рдФрд░ рд░реВрд╕реА рдореЗрдВ) рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ ред Cppcheck рдкреНрд░рд▓реЗрдЦрди рд╡рд░реНрд╖-рджрд░-рд╡рд░реНрд╖ рдмреЗрд╣рддрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрднреА-рдХрднреА рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рдпрджрд┐ рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реВрдВ, рддреЛ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХреЛ рдкрдврд╝реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рдХрднреА cccheck рдФрд░ analyzers рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рд╕реНрддрд░

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, cppcheck рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдХреЗрд╡рд▓ рдПрдХ рд╕реМ рдкреНрд░рддрд┐рд╢рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдХреНрд╖реЗрддреНрд░ рдкрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрдЧ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдЯреЗрд╢рдиреЛрдВ рдкрд░ cppcheck рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рддрд╛рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдЭреВрдареЗ рдЕрд▓рд╛рд░реНрдо рдХреЗ рдХрд╛рд░рдг, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рдмрд╛рдж рдмрдВрдж рди рд╣реЛред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 void f() { char *a = malloc(100); process_a(a); } 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдПрдХ рдЧрд▓рддреА рд╣реИ: рдХреЛрдИ рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ process_a рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ process_a рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрд╣реАрдВ рдЕрдВрджрд░ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ process_a рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдореБрдХреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, cppcheck рдкрд╣рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдХреЛрдб рдореЗрдВ process_a рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдореБрдлреНрдд рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ cppcheck рд╕рдВрднрд╡ рд╕рдмрд╕реЗ рдЕрдиреБрдХреВрд▓ рдкрд░рд┐рджреГрд╢реНрдп рдорд╛рдирддрд╛ рд╣реИ: process_a рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП cppcheck рдХреЛ "рд╕рд┐рдЦрд╛рдпрд╛" рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рд╕рдЯреАрдХрддрд╛ рдмрдврд╝ рдЬрд╛рдПрдЧреА - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг:

 void f() { char *a = malloc(100); if(random()) g_exit(0); free(a) } 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ g_exit рдорд╛рдирдХ рдирд┐рдХрд╛рд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдКрдкрд░ GLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рд▓реЗрдХрд┐рди cppcheck рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ g_exit рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣рд╛рдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ cppcheck рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ g_exit рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╕реАрдЦ рд╕рдХреЗред

рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ cppcheck рдкреБрдирд░реНрдмреАрдорд╛ рд╣реИ, рдФрд░ рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдкрдЯреНрдЯреА рдЕрдзрд┐рдХ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ cppcheck рдЪреЗрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдЪреЗрдХ рдХреЛ -enable рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЪреЗрдХ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 cppcheck -q -j4 --enable=warning,style,performance,portability ./source 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдВрдЪ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рд╕рдм рдХреАрд╡рд░реНрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдЪреЗрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

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

рдПрдХ рдЯреАрдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдХреЛ "рдбреНрд░рд╛рдЗрд╡" рдХрд░рддрд╛ рд╣реИ:

 cppcheck -q --enable=all ./source 

рдФрд░ рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рддреНрд░реБрдЯрд┐-рдореБрдХреНрдд рд╣реИ, рддреЛ --inconclusive рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде cppcheck рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕ рдореЛрдб рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЬрд╛рдВрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдХрд┐рдкреНрдкреЗрдХ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдмрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рд╕рддреНрдпрд╛рдкрди рдореЛрдб:

 cppcheck -q --enable=all --inconclusive ./source 

рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛!

Cppcheck рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрд┐рд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕ рд╕рддреНрдпрд╛рдкрди рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ --platform рд╡рд┐рдХрд▓реНрдк рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо:


рдпрджрд┐ рдЖрдкрдХреЛ рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Win32 рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 cppcheck --platform=win32A ./source 

рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд┐рд╕ рдорд╛рдирдХ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЪреЗрдХ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдирдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде --std рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ:


рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рдорд╛рдирдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 cppcheck --std=c99 --std=posix ./source 

рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ

рд╢рд╛рдпрдж рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдбрд╝рддрд╛рд▓реА рд╣реИ рдХрд┐ рдореИрдВ рд╣рд░ рдЬрдЧрд╣ -q -j рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

-j рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдореЛрдб рдореЗрдВ рд╕реНрдХреИрди рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
-рдХреН - рдореВрдХ рдореЛрдбред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, cppcheck рд╕реНрдХреИрди рдХреА рдкреНрд░рдЧрддрд┐ (рдЬреЛ рдмрд╣реБрдд рд╣реЛ рд╕рдХрддреА рд╣реИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реА рд░рд╣рддреЗ рд╣реИрдВред
-f рдпрд╛ --force - ifdef рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЧрдгрдирд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреИрдкрдЪреЗрдХ рдПрдХ рджрд░реНрдЬрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдХреНрдпрд╛ рд╣реИ - рдлрд┐рд░ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
-v - рдбрд┐рдмрдЧ рдореЛрдб - cppcheck рд╕реНрдХреИрди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
--xml - XML тАЛтАЛрд╕реНрд╡рд░реВрдк рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
--template = gcc - gcc рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ (рдРрд╕реЗ рд╕рдВрдХрд▓рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ IDE рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ)ред
--suppress - рд╕рдВрдХреЗрдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рджрдорди рдореЛрдб (рджреЛрд╣рд░рд╛рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
-h - рд╢реБрджреНрдз рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдорджрдж рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕рдВрджреЗрд╢ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЕрдкрд╡рд╛рдж

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

рдЕрдкрд╡рд╛рдж рд╕реНрд╡рд░реВрдк:

 id[:file:[line]] 

рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдИрдбреА (рддреНрд░реБрдЯрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛), рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдмрд╛рдж, рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рдмрд╛рдж, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рднреА, рдЖрдк рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЕрдХреНрд╕рд░ рдкреЙрдк рдЕрдк рд╣реЛрддреА рд╣реИ:

 The scope of the variable '%VAR' can be reduced. 

рдпрд╣ рддреНрд░реБрдЯрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 cppcheck -q -j4 --enable=all --suppress=variableScope ./source 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, cppcheck рдорд╛рдирд╡-рдкрдардиреАрдп рддреНрд░реБрдЯрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдирд╣реАрдВ, рдЬрд┐рд╕реЗ рдпрд╛рдж рд░рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

--Errorlist рдкреИрд░рд╛рдореАрдЯрд░, рдЬреЛ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ "рдЖрдкрддреНрддрд┐рдЬрдирдХ" рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ --template рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:

 cppcheck -q -j4 --enable=all --template='{id} {file}:{line} {message}' ./source 

рдореЗрд░рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдм рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╕рдВрджреЗрд╢ рдХреЛ рд╣реАред рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЖрдЙрдЯрдкреБрдЯ рдЙрджрд╛рд╣рд░рдг
 variableScope geany/src/document.c:1099 The scope of the variable 'use_ft' can be reduced. variableScope geany/src/document.c:1257 The scope of the variable 'filename' can be reduced. variableScope geany/src/document.c:2306 The scope of the variable 'keywords' can be reduced. variableScope geany/src/document.c:3011 The scope of the variable 'old_status' can be reduced. variableScope geany/src/editor.c:194 The scope of the variable 'specials' can be reduced. variableScope geany/src/editor.c:248 The scope of the variable 'ptr' can be reduced. variableScope geany/src/editor.c:1545 The scope of the variable 'text' can be reduced. variableScope geany/src/editor.c:4309 The scope of the variable 'tab_str' can be reduced. 


рдЕрдВрдд рдореЗрдВ, --suppress- рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреБрд╕реНрдЦрд╛ред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░, рдпрд╣ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 cppcheck -q --enable=all --template='{id}:{file}:{line}' ./source > suppress-list.txt 

рдЕрдм рдкрд░рд┐рдгрд╛рдореА рдлрд╛рдЗрд▓ рдХреЛ cccheck рдЗрдирдкреБрдЯ рдореЗрдВ рдЬрдорд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдПрдХ рднреА рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЭреВрдареА рд╣реИрдВред

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

рд╣рдо рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

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

рдЕрдЬреНрдЮрд╛рдд рдПрдХ рдЪрд╛рд▓ рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИред GLib рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдЖрдо рдмрд╛рдд рддрд░реНрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИ:

 void f(gchar *s1, gchar *s1) { g_return_if_fail(s1); gchar *a = g_strdup(s1); g_return_if_fail(s2); gchar *b = g_strdup(s2); } 

рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ g_return * рдореИрдХреНрд░реЛрдЬрд╝ рд╣реИрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди f рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╕рд╣реА рдирд┐рдХрд▓рд╛, рдФрд░ рджреВрд╕рд░рд╛ рдирд╣реАрдВ, рддреЛ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред Cppcheck рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрдирдЬрд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ g_return_if_fail рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ "рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп" рдорд╛рдирддрд╛ рд╣реИ, рди рдХрд┐ рдореИрдХреНрд░реЛред

рдпрджрд┐ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк cppcheck рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдореИрдХреНрд░реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди g_return_if_fail рдХреЛ рдвреВрдВрдвреЗрдЧрд╛ , рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ, рдФрд░ cppcheck рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рд╢рд░реНрдд рд╡рд╛рдкрд╕реА рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдЬреЛ рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рдкреИрдЯрд░реНрди рд╣реИред

рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдкрде рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИред -I рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рд╕рдорд╛рди рдирд╛рдо рдХреЗ gcc рдХрдВрдкрд╛рдЗрд▓рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИред GLib рдФрд░ Linux рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рдорд╛рд░реНрдЧ рд╣реИ:

 cppcheck -q -I/usr/include/glib-2.0/ ./source 

рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ (рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рдордп рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИ) ifdef рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЧрдгрдирд╛ рд╣реИред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ ifdef рд╣реИ, рддреЛ cccheck рджреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░реЗрдЧрд╛ред рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ ifdef рд╢рд╛рдЦрд╛рдПрдБ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрддрдиреЗ рд╣реА рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ -D рдФрд░ -U рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -D A рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ A рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред -U B рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ B рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

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

Cppcheck рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╕рднреА #include рдХреЛ рдкреВрд░реНрд╡рдкреНрд░рдХреНрд░рдорд┐рдд рдХрд░рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдордЬрдмреВрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ - cppcheck рдЙрди рд╕рднреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рднреА рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЫреАрд▓ рджреЗрдЧрд╛ рдЬреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рддрдХ рдкрд╣реБрдБрдЪ рдЪреБрдХреЗ рд╣реИрдВред

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

рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ -I рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ cppcheck рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд╣рд╛рдБ рджреЗрдЦреЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдпрджрд┐ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╕рдорд╛рди #include рд╣реИред рдЖрдк рдереЛрдбрд╝реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕реА рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдкрд░ рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ --append рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо GLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ g_return_if_fail рдПрдХ рдореИрдХреНрд░реЛ рд╣реИред

рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

 void f(char *s1, char *s1) { g_return_if_fail(s1); char *a = g_strdup(s1); g_return_if_fail(s2); char *b = g_strdup(s2); free(a); free(b); } 

Cppcheck рдЪрд▓рд╛рдПрдВ:

 cppcheck -q test.c 

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдПрдХ gtk.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 #define g_return_if_fail(expr) do{if(!(expr)){return;}}while(0) 

рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 cppcheck -q test.c --include=gtk.h 

рд╣рдореНрдоред рдлрд┐рд░ рдХреБрдЫ рдирд╣реАрдВ? рдпрджрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдб рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк g_strdup рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ cppcheck рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдЖрдЗрдП рд╕рд░рд▓рддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ( gtk.c рдлрд╝рд╛рдЗрд▓) рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 char * g_strdup(const char *s) { return strdup(s); } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдореИрдХреНрд░реЛ рдирд╣реАрдВред
рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХреЛ --append рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ;

 cppcheck -q test.c --include=gtk.h --append=gtk.c [test.c:4]: (error) Memory leak: a 

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

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЫрдд рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрд╣ GLib рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдорд┐рд▓рддреА рд╣реИред

рдореИрдХреНрд░реЛ рдПрдВрдб рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдЯреНрд░рд┐рдХреНрд╕


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

рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, cppcheck рдХреЛ рдХрд┐рд╕реА рднреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ / рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдХреНрд░реЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рд╡реЗ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдХрд╕реНрдЯрдо рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди my_alloc рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 my_alloc(char **a); 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдирд╣реАрдВ рджреА рдЬрд╛рдПрдЧреА:

 void f(){ char *a, *b; my_alloc(&a, &b); } 

рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ:

 void my_alloc(char **a, char **b) { *a = malloc(13); *b = malloc(42); } 

рдФрд░ рдЪреЗрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛:

 [test.c:4]: (error) Memory leak: a [test.c:4]: (error) Memory leak: b 

рдЪреЗрдХ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд░реЗрдВ

рдпрджрд┐ рдХреЛрдИ рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдБрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЫрд┐рдкрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:

 #define unused_func(arg...) 

рддреНрд░реБрдЯрд┐ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдЖрдмрдВрдЯрди

рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдХрд╛рд░реНрдп, рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдХреЛрдб рд╕рд╣реА рд╣реИ:

 void f() { int is_ok; char *a = my_alloc(&is_ok); if(is_ok) free(a); } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ cppcheck my_alloc рдХреЛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЪреЗрдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 char *my_alloc(int *ok) { char *a = malloc(42); if(a) *ok = 1; else *ok = 0; return a; } 

рдкреБрд╕реНрддрдХрд╛рд▓рдп-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


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

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

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

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд▓рд┐рдирдХреНрд╕ рдкрд░, рдХрдИ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди GLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧреНрд▓рд┐рдмреЗрдХ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрд╕рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореЙрд▓реЛрдХ / рдореБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, GLib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 gchar *s = g_strdup("test"); gint *a = g_malloc(sizeof(int) * 10); 

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ g_strdup рдФрд░ g_malloc рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдПрдХ рд╡реНрдпрдХреНрддрд┐ GLB рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд┐рдирд╛, рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдЧрд╛ред рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ: g_malloc рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ - рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

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

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

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

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 cppcheck -q --library=gtk ./source 

рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ (рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):

 cppcheck -q --library=my/path/mylib.xml ./source 

рдЖрдЬ рддрдХ, cppcheck рдмрд╣реБрдд рдХрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:


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

 <?xml version="1.0"?> <def> <function name="usleep"> <noreturn>false</noreturn> <arg nr="1"><not-bool/><valid>0-999999</valid></arg> </function> <function name="_exit"> <noreturn>true</noreturn> </function> </def> 

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХреЛ рдЪрдордХрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: cppcheck XML рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЖрдзрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ "рдордЫрд▓реА рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ" рдореЗрдВ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ:


( )

рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ cppcheck рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ cfg рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреАред Cfg рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ cfg рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП nailed рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Cfg рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╣реЗрдбрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:

 <?xml version="1.0"?> 

рдкреВрд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреАрдлрд╝ рдЯреИрдЧ рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реБрдЖ рд╣реИ ред рдбрд┐рдл рдХреЗ рдЕрдВрджрд░ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреИрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдореГрддрд┐ рдФрд░ рд╕рдВрд╕рд╛рдзрди , рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╡реЗ рдПрдХ рд╣реА рд╣реИ:


рдкреНрд░рддреНрдпреЗрдХ рдореЗрдореЛрд░реА рдФрд░ рд╕рдВрд╕рд╛рдзрди рдмреНрд▓реЙрдХ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕реНрдореГрддрд┐ рд╕рдорд╛рд░реЛрд╣ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд malloc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдореБрдХреНрдд , рдФрд░ g_malloc - рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ g_free рд╕рд╛рде , рд╡реЗ рдкрд░рд╕реНрдкрд░ рдЕрд▓рдЧ рдЯреИрдЧ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рд╕реНрдореГрддрд┐ ред

рдлрд╝рдВрдХреНрд╢рди ( рдлрд╝рдВрдХреНрд╢рди ) - рдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдЯреИрдЧ рдХреЗ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


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

рд╣рдо GLib рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ

GLib рдПрдХ C рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ GTK + рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ C (рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ: GIMP, GNOME, Xfce, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреНрд░реЛрдорд┐рдпрдо / рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдПрдХ рд╕реАрдорд╛ рддрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

GLib рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Malloc / free рдпрд╛ printf рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ GLib рдХреЗ рдЕрдВрджрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЧреНрд▓рд┐рдмреЗрдХ рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рди рд╣реЛред рдирддреАрдЬрддрди, GLib рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрдЬрдиреЛрдВ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЬреЛ cppcheck рдкрд░ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

Cppcheck рдореЗрдВ рдХреЗрд╡рд▓ рд╣рд╛рд▓ рд╣реА рдореЗрдВ GLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдкреЛрд░реНрдЯ рдХреА рдЕрд╢рд┐рд╖реНрдЯрддрд╛ рджрд┐рдЦрд╛рдИ рджреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, cppcheck рдРрд╕реА рд╕реНрдкрд╖реНрдЯ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ:

 void f() { g_malloc(42); } 

 cppcheck -q test.c --library=gtk [test.c:3]: (error) Return value of allocation function g_malloc is not used. 

рд╣рд╛рд▓рд╛рдБрдХрд┐, GLib рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рдХрд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЬрдЯрд┐рд▓ рдЬрдЯрд┐рд▓рддрд╛ рдЕрдм рдирд╣реАрдВ рд╣реЛрдЧреА:

 void f() { gchar *a = g_strdup(s); g_strdown(a); } 

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ g_strdown рдлрд╝рдВрдХреНрд╢рди рдЕрдЬреНрдЮрд╛рдд рд╣реИред рдЕрдЪрд╛рдирдХ рд╡рд╣ рдЕрдкрдиреА рдпрд╛рджрджрд╛рд╢реНрдд рдЦреБрдж рдореБрдХреНрдд рдХрд░рддреА рд╣реИ?

GLib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдШрдЯрдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рд╣рдо рдирд┐рдпрдореЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЬреАрд▓рд┐рдм рдФрд░ рдЬреАрдЯреАрдХреЗ + рдореЗрдВ рдЪрд╛рд░ рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВ, рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг GLib рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА XML рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд╕рд░рд▓рддрд╛ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, GLib рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдХрд░ рдореИрдиреНрдпреБрдлреИрдХреНрдЪрд░рд░реНрд╕ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рдм рдХрд╛рдо (рдЬреАрдПрд▓рдЖрдИрдмреА / рдЬреАрдЯреАрдХреЗ + рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП) рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИ ред

рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдПрдХреНрд╕рдПрдордПрд▓ рд╕реЗ рдПрд▓рд░реНрдЬреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛, рдЬреЛ рддрдм рдПрдХ рд╡рд┐рд╢рд╛рд▓ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкрд╛рд░реНрд╕рд░ рд╣реЛрддрд╛ рд╣реИред XML рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЯрд╛рдЗрдк рдХрд░реЗрдВред рджреЛ рд╕реВрддреНрд░реЛрдВ: gtk.rules , рдЬрд╣рд╛рдВ рдореИрдиреБрдЕрд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬреАрдЯреАрдХреЗ-functions.rules - рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ XML- рдЖрдзрд╛рд░рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ GLib / рдЬреАрдЯреАрдХреЗ +ред рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рди рдЬрд╛рдПред

рдлрд┐рд▓рд╣рд╛рд▓, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдореЛрдмреЗрд╢ рд╕реНрдерд┐рд░ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ cppcheck /ff рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВрдкреБрд░рд╛рдиреЗ рдХреА рдЬрдЧрд╣ рд▓реЗ рд░рд╣рд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк GLib / GTK + рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ cppcheck рдореЗрдВ рдзрдХреЗрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореИрдВрдиреЗ рдПрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬреЛ рд▓реЛрдХрдкреНрд░рд┐рдп g_return_ * рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИ ред рдЗрд╕рдХреЗ рд╕рд╛рде, cppcheck рдЗрди рдореИрдХреНрд░реЛ рдХреЗ рд╕рдореНрдорд┐рд▓рди рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝реЗрдЧрд╛ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ --include рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдереВрдирд░ рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг


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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ "рд╕рд╛рдл" cppcheck рд╡рд┐рд╢реНрд▓реЗрд╖рдг:

 cppcheck -q -j4 --max-configs=1 ./Thunar-1.6.3 [Thunar-1.6.3/thunar/thunar-chooser-dialog.c:450]: (error) Uninitialized variable: app_info 

рдмрд╣реБрдд рдХрдо рдХреИрдЪред

рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 cppcheck -q -j4 --max-configs=1 --library=gtk --include=gtk.h ./Thunar-1.6.3 

рдЯреАрдо рдЖрдЙрдЯрдкреБрдЯ
 [Thunar-1.6.3/plugins/thunar-sendto-email/main.c:410]: (error) Memory leak: tmpdir [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-provider.c:166]: (error) Memory leak: dialog [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:150]: (error) Memory leak: label [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:168]: (error) Memory leak: label [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:211]: (error) Memory leak: label [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:251]: (error) Memory leak: label [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:391]: (error) Memory leak: align [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:395]: (error) Memory leak: label [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:399]: (error) Memory leak: align [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:433]: (error) Memory leak: align [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:446]: (error) Memory leak: label [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-editor.c:458]: (error) Memory leak: align [Thunar-1.6.3/plugins/thunar-wallpaper/twp-provider.c:301]: (error) Memory leak: escaped_file_name [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-model.c:1520]: (error) Memory leak: command_line [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-model.c:1521]: (error) Memory leak: command_line [Thunar-1.6.3/plugins/thunar-uca/thunar-uca-model.c:1522]: (error) Memory leak: command_line [Thunar-1.6.3/thunar/thunar-column-editor.c:576]: (error) Memory leak: dialog [Thunar-1.6.3/thunar/thunar-chooser-dialog.c:450]: (error) Uninitialized variable: app_info [Thunar-1.6.3/thunar/thunar-device-monitor.c:829]: (error) Mismatching allocation and deallocation: devices [Thunar-1.6.3/thunar/thunar-folder.c:686]: (error) Mismatching allocation and deallocation: attrs [Thunar-1.6.3/thunar/thunar-file.c:1568]: (error) Mismatching allocation and deallocation: argv [Thunar-1.6.3/thunar/thunar-list-model.c:1084]: (error) Memory leak: old_order [Thunar-1.6.3/thunar/thunar-properties-dialog.c:446]: (error) Memory leak: spacer [Thunar-1.6.3/thunar/thunar-properties-dialog.c:534]: (error) Memory leak: spacer [Thunar-1.6.3/thunar/thunar-shortcuts-model.c:2210]: (error) Mismatching allocation and deallocation: bookmarks [Thunar-1.6.3/thunar/thunar-standard-view.c:1911]: (error) Returning/dereferencing 'file' after it is deallocated / released [Thunar-1.6.3/thunar/thunar-window.c:2028]: (error) Memory leak: checksum [Thunar-1.6.3/thunar/thunar-window.c:2028]: (error) Memory leak: tooltip 


27 рдирдП рдХреАрдбрд╝реЗ - рдЕрдм рдХреБрдЫ!

рдХреНрдпрд╛ рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреАрдбрд╝реЗ рд╣реИрдВ рдпрд╛ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ?

рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ:

  tmpdir = g_strdup ("/tmp/thunar-sendto-email.XXXXXX"); if (G_UNLIKELY (mkdtemp (tmpdir) == NULL)) { error = g_error_new_literal (G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno)); tse_error (error, _("Failed to create temporary directory")); g_error_free (error); return FALSE; } /* -   */ g_free(tmpdir); 

рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг
  escaped_file_name = g_shell_quote (file_name); switch (desktop_type) { case DESKTOP_TYPE_XFCE: ... break; case DESKTOP_TYPE_NAUTILUS: ... break; default: return; /* , ?    break??? */ break; } g_free (escaped_file_name); 

  GString *command_line = g_string_new (NULL); GList *lp; gchar *dirname; gchar *quoted; gchar *path; gchar *uri; g_return_val_if_fail (THUNAR_UCA_IS_MODEL (uca_model), FALSE); g_return_val_if_fail (iter->stamp == uca_model->stamp, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); 


рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ / рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд┐рд╕рдореИрдЪред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгреА рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗ :

  gchar **attrs; ... attrs = g_file_info_list_attributes (info1, NULL); ... g_free (attrs); 

рдкреЙрдЗрдВрдЯрд░ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  GtkTreePath *path = NULL; GtkTreeIter iter; ThunarFile *file = NULL; path = (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_path_at_pos) (standard_view, x, y); if (G_LIKELY (path != NULL)) { gtk_tree_model_get_iter (GTK_TREE_MODEL (standard_view->model), &iter, path); file = thunar_list_model_get_file (standard_view->model, &iter); if (!thunar_file_is_directory (file) && !thunar_file_is_executable (file)) { g_object_unref (G_OBJECT (file)); /*     ! */ gtk_tree_path_free (path); path = NULL; } } return file; 

рдпрд╣ рдПрдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдЪреЗрддрд╛рд╡рдиреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ g_object_unref рд▓рд┐рдВрдХ рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред

рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ред рдХреБрдЫ рдереЗ - рдХреБрдЫ gtk рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА, рдЕрдЧрд░ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ - cppcheck рд╢рдкрде рд▓реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг
 static void manage_actions (GtkWindow *window) { GtkWidget *dialog; dialog = g_object_new (THUNAR_UCA_TYPE_CHOOSER, NULL); gtk_window_set_transient_for (GTK_WINDOW (dialog), window); gtk_widget_show (dialog); } 

  label = g_object_new (GTK_TYPE_LABEL, "label", _("Appears if selection contains:"), "xalign", 0.0f, NULL); gtk_table_attach (GTK_TABLE (table), label, 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); 

, , g_object :

  dialog = g_object_new (THUNAR_TYPE_COLUMN_EDITOR, NULL); ... gtk_widget_destroy (dialog); 

, g_new :

  devices = g_new0 (gchar *, length + 2); ... g_strfreev (devices); 

cppcheck . cppcheck:

  /* be sure to not overuse the stack */ if (G_LIKELY (length < 2000)) { old_order = g_newa (GSequenceIter *, length); new_order = g_newa (gint, length); } else { old_order = g_new (GSequenceIter *, length); new_order = g_new (gint, length); } ... /* clean up if we used the heap */ if (G_UNLIKELY (length >= 2000)) { g_free (old_order); g_free (new_order); } 


рд▓реЗрдХрд┐рди рдЗрди рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрд╛ рдЖрдХрд░реНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ XML рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдкреИрдЪ рдХрд░рдХреЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ 14. рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рдерд╛ред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЬреАрдПрд▓рдЖрдИрдмреА рдореЗрдВ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

Cppcheck рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рд▓рд┐рдЦрдирд╛


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

рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реИ?

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреИрд╕реЗ cppcheck рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ, cppcheck рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рдорд╛рди рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рдЪрд░рдг рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рд╣реИ: рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрдВрдбреЗрдВрдЯ рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдареАрдХ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдмреНрд▓реЙрдХ {} рдХреЛ рд╣рд░ рдЬрдЧрд╣ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдЫреЛрдбрд╝реЗ рдЧрдП рд╣реЛрдВред рдпрджрд┐ рдмреНрд▓реЙрдХ рдХреЗ рднреАрддрд░ / / рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдпрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЪреВрдВрдХрд┐ рд╕рднреА рдХреА рдПрдХ рдЕрд▓рдЧ рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдбрдкреЗрдХ рдПрдХ "рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк" рдореЗрдВ рдХреЛрдб рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рддрд░рд╣ рдПрдХ рд▓реВрдк рд▓рд┐рдЦрддрд╛ рд╣реИ:

 for(int i = 0; i < 10; i++) if(i % 2) printf("%d\n", i); 

рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕ рддрд░рд╣ рд╣реИ:

 int i; for(i = 0; i < 10; i++) { if(i % 2) printf("%d\n", i); } 

Cppcheck рдпрд╣ рд╕рдм рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рдПрдЧрд╛:

 int i ; for ( i = 0 ; i < 10 ; i ++ ) { if ( i % 2 ) { printf ( "%d\n" , i ) ; } } 

рдмрд╣реБрдд рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рд╕рднреА рд╢рд╛рдмреНрджрд┐рдХ рдирд┐рд░реНрдорд╛рдг рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрдирдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

Cppcheck рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рдХрдИ рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рд╕рд░рд▓, рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реНрд░реЛрддред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕рд░рд▓" рд╕реНрддрд░ рдкрд░, рдЖрдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрддрд░ рдореЗрдВ, рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдХрднреА-рдХрднреА рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрддрд░ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдХреЛрдб рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдиреЗ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдХреИрд╕реЗ cppcheck рдХреБрдЫ рдбрд┐рдЬрд╝рд╛рдЗрдиреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдбрд┐рдмрдЧ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ cppcheck рдХреЛрдб рдХрд╛ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

 cppcheck --debug ./file.cpp 

рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рдпрдо

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

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рд╕рд╣рд┐рдд, cppcheck (рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореИрдВ git рд╕реЗ рд╕реНрд░реЛрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреАрд╕реАрдЖрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рдВрдХрд▓рди рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИ:

 make HAVE_RULES=yes 

Cppcheck рдореЗрдВ рдЕрдм рджреЛ рдирдП рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВрдЧреЗ: - nowlele - рдЖрдк рдПрдХ рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рд╕реАрдзреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдФрд░ --rule-file - рдПрдХ XML рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЕрдкрдиреЗ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдирдП рдЕрд╡рд╕рд░ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛред рдЯреЗрд╕реНрдЯ рдХреЗрд╕:

 void f() { if(a) free(a); } 

рдЕрдЧрд▓рд╛ рдЪреЗрдХ рдЖрдЗрдП рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд░реЗрдВ рдЬреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХреБрдЪрд▓ рджреЗрддреА рд╣реИ:

 cppcheck -q --rule=".*" test.c [test.c:1]: (style) found ' void f ( ) { if ( a ) { free ( a ) ; } }' 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ "рд╕рд░рд▓реАрдХреГрдд" рджреГрд╢реНрдп рд╣реИред

рдЕрдм рд╣рдо рдПрдХ рдирд┐рдпрдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рдореБрдХреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 cppcheck -q --rule='if \( (\w+) \) { free \( \1' test.c [test.c:2]: (style) found 'if ( a ) { free ( a' 

рдкреИрдЯрд░реНрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдирд┐рдпрдо рдмрдирд╛рдПрдБред Xml рдлрд╝рд╛рдЗрд▓ , рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрддреЗ рд╣реБрдП:

 <?xml version="1.0"?> <rule> <pattern>if \( (\b\w+\b) \) { (?:g_)?free \( \b\1\b \) ; }</pattern> <message> <severity>style</severity> <summary>Redundant condition. It is valid to free a NULL pointer.</summary> </message> </rule> 

рдЕрдм рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдпрдо рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреБрдЫ рд╕реНрд░реЛрдд рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 cppcheck -q --rule-file=rules.xml test.c [test.c:2]: (style) Redundant condition. It is valid to free a NULL pointer. 

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

 <tokenlist>raw</tokenlist> 

рдЯреЛрдХрди рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рдпрджрд┐ рдЖрдк рд╕рд╛рд░рд╛рдВрд╢ рдЯреИрдЧ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ - рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рд░реЗрдЦрд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддреА рд╣реИ - рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЛрдб рд╣реИред

рдирд┐рдпрдореЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:

рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдп, рд▓реЗрдХрд┐рди рд╢реВрдиреНрдп рдХреЗ рдмрд┐рдирд╛
void:

 void f() {} /*  */ void f(void) {} /*  */ 

 <rule> <tokenlist>raw</tokenlist> <pattern>\( \) {</pattern> <message> <severity>style</severity> <summary>Always specify void even if a function accepts no arguments</summary> </message> </rule> 


рдЖрдХрд╛рд░ рдХреЗ рдЕрдВрджрд░ рд╡реГрджреНрдзрд┐ / рдЧрд┐рд░рд╛рд╡рдЯ рдХреЛ рдкрдХрдбрд╝реЛ
 <rule> <tokenlist>raw</tokenlist> <pattern>sizeof \( [^)]*(?:\w+ [+-]{2}|[+-]{2} \w+)[^)]* \)</pattern> <message> <severity>warning</severity> <summary>Operands to the sizeof operator should not contain side effects</summary> </message> </rule> 


рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
 <rule> <pattern>mktemp \( "[^"]+" \)</pattern> <message> <severity>error</severity> <summary>The mktemp() function modifies its string argument</summary> </message> </rule> 


рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрдЪреЗрдВ
 <rule> <pattern> gets \( \w+ \)</pattern> <message> <severity>error</severity> <summary>The gets() function is obsolescent, and is deprecated</summary> </message> </rule> 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдПрдХреНрд╕рдПрдордПрд▓ рд╕реЗ рдПрд▓рд░реНрдЬреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХреГрдд рдЖрдзрд╛рд░ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдкрд╛рдпрдерди рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ ред рдореИрдВрдиреЗ рдЬреЛ XML рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ C рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (C ++ рдирд╣реАрдВ!) рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдЯреЛрди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп CERT рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

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

рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ cppcheck рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ: рдПрдХ , рджреЛ , рддреАрди (рддреАрд╕рд░рд╛ рднрд╛рдЧ C ++ рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ)ред рдЖрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреИрдЪ, рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ, рдмрдЧреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдФрд░ рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЛрдИ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдкреБрд▓ рдЕрдиреБрд░реЛрдз :)ред

Source: https://habr.com/ru/post/In210256/


All Articles