If the match compiler uses the 'verify' mode and we compile with -O2, some tests comparing the on-the-fly-parser to the compiled match fail. Small functions are inlined by the -O2 compile flag. If we disable function inlining and still compile with -O2, everything is back to normal. gdb didn't show anything useful during the mismatch since the needed variables are optimized out. Once we start printing them, the problem vanishes, too. -> Can only be diagnosed at the x86 assembly level. The problem vanished by switching the invocation order of Token::Match() and the compiled match, so just swap them. Also add commented out helper code to better diagnose mismatch problems.
Cppcheck
Donations
Donations
If you find Cppcheck useful for you, feel free to make a donation.
About the name
The original name of this program was "C++check", but it was later changed to "Cppcheck".
Despite the name, Cppcheck is designed for both C and C++.
Manual
A manual is available online.
Compiling
Any C++ compiler should work.
To build the GUI, you need Qt.
When building the command line tool, PCRE is normally used. PCRE is optional.
There are multiple compilation choices:
- qmake - cross platform build tool
- Windows: Visual Studio or Qt Creator or MinGW
- gnu make
- g++
qmake
You can use the gui/gui.pro file to build the GUI.
cd gui
qmake
make
Visual Studio
Use the cppcheck.sln file. The rules are normally enabled.
To compile with rules (PCRE dependency):
- the PCRE dll is needed. It can be downloaded from here.
To compile without rules (no dependencies):
- remove the preprocessor define
HAVE_RULES
from the project - remove the pcre.lib from the project
Qt Creator + MinGW
The PCRE dll is needed to build the CLI. It can be downloaded here: http://software-download.name/pcre-library-windows/
gnu make
To build Cppcheck with rules (PCRE dependency):
make HAVE_RULES=yes
To build Cppcheck without rules (no dependencies):
make
g++ (for experts)
If you just want to build Cppcheck without dependencies then you can use this command:
g++ -o cppcheck -Ilib cli/*.cpp lib/*.cpp
If you want to use --rule
and --rule-file
then dependencies are needed:
g++ -o cppcheck -lpcre -DHAVE_RULES -Ilib -Iexternals cli/*.cpp lib/*.cpp externals/tinyxml/*.cpp
MinGW
make LDFLAGS=-lshlwapi
Cross compiling Win32 (CLI) version of Cppcheck in Linux
sudo apt-get install mingw32
make CXX=i586-mingw32msvc-g++ LDFLAGS="-lshlwapi"
mv cppcheck cppcheck.exe