risorse | cppcheck

Cppcheck

Cppcheck è un analizzatore statico di codice C/C++ – statico perché basato sull'analisi dei sorgenti piuttosto che sugli effetti del lancio dell'eseguibile. Il suo scopo è quello di individuare gli errori di programmazione prima ancora dell'esecuzione dei test case.

Tra le varie attività svolte dall'analizzatore, alcune degne di nota:

Le segnalazioni prodotte si suddividono in errori veri e propri (error, es. «division by zero»), potenziali errori (warning, es. «member variable is not initialized in the constructor»), questioni stilistiche (style, es. «exception should be caught by reference»), aspetti legati all'efficienza (performance, es. «prefer prefix ++/-- operators for non-primitive types») o alla portabilità (portability, es. «assigning an address value to the integer (int/long/etc) type is not portable»).

Un interessante aspetto di Cppcheck è che può essere invocato dalla linea di comando. Questa caratteristica mi ha permesso di sfruttarlo nella procedura di build di un progetto C++ di medie dimensioni, interrompendo il processo nel caso Cppcheck individui una o più condizioni d'errore. Lo script che segue torna 0 se l'invocazione di Cppcheck non ha evidenziato errori, 1 in caso contrario:

rem cppcheck.cmd
@echo off

if "%1"=="" echo Usage: %~n0 source-files-or-folders && exit /b %ERROR%

set PROGRAMFILES32=%ProgramFiles(x86)%
if "%PROCESSOR_ARCHITECTURE%"=="x86" set PROGRAMFILES32=%ProgramFiles%

set ANALYSER="%PROGRAMFILES32%\Cppcheck\cppcheck.exe"
set TEST_FLAGS=--version ^>nul 2^>^&1
set FLAGS=%* --template gcc --enable=all ^> nul 2^> %REPORT%
set REPORT=cppcheck.log
set ERROR_PATTERN= error:

%ANALYSER% %TEST_FLAGS%
if %ERRORLEVEL% NEQ 0 set ERROR=%ERRORLEVEL% && echo cppcheck not found && exit /b %ERROR%

echo analysing sources...
%ANALYSER% %FLAGS%
findstr /L /C:"%ERROR_PATTERN%" %REPORT% 1> nul 2>&1
if %ERRORLEVEL% EQU 0 echo errors detected: see "%REPORT%" for details && exit /b 1
del /q %REPORT%

Lo script viene avviato passando come parametri le directory che contengono i file da analizzare:

C:\...\>cppcheck.cmd project-base-dir\sources project-base-dir\tests

Se avviato da linea di comando, Cppcheck è anche in grado di eseguire delle verifiche personalizzate: è sufficiente infatti riportare l'espressione regolare che individua il codice sospetto, assieme al messaggio e alla natura della segnalazione da generare, in un file XML da indicare tra i parametri d'avvio. Il manuale spiega chiaramente come sfruttare questa possibilità.

Pagina modificata l'8/11/2011