diff --git a/cppcheck.geany b/cppcheck.geany index 2b1f86d43..c911fac2a 100644 --- a/cppcheck.geany +++ b/cppcheck.geany @@ -8,3 +8,5 @@ run_cmd= [files] current_page=0 +FILE_NAME_0=2519;1;0;16;0;1;0;/home/danmar/cppcheck/src/main.cpp; +FILE_NAME_1=1117;0;0;16;0;1;0;/home/danmar/cppcheck/src/checkbufferoverrun.h; diff --git a/src/main.cpp b/src/main.cpp index ec9e5c5db..b34e4148c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,24 +20,65 @@ /** * * @mainpage Cppcheck + * @version 1.34 * * @section overview_sec Overview - * The source code is first tokenized and then checked. + * Cppcheck is a simple tool for static analysis of C/C++ code. * - * @section writing_checks_sec Writing checks - * The checks are written in C++. Below is a simple example of a check - * that detect division with zero: + * The method used is to first tokenize the source code and then analyse the token list. + * In the token list, the tokens are stored in plain text. + * + * The checks are written in C++. The checks are addons that can be easily added/removed. + * + * @section writing_checks_sec Writing a check + * Below is a simple example of a check that detect division with zero: * @code void CheckOther::checkZeroDivision() { + // Iterate through all tokens in the token list for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) { if (Token::Match(tok, "/ 0")) - reportError(tok, "error", "zerodiv", "Division by zero"); + reportError(tok, Severity::error, "zerodiv", "Division by zero"); } } @endcode * + * The function Token::Match is often used in the checks. Through it + * you can match tokens against patterns. + * + * + * @section checkclass_sec Creating a new check class from scratch + * %Check classes inherit from the Check class. The Check class specifies the interface that you must use. + * To integrate a check class into cppcheck all you need to do is: + * - Add your source file(s) so they are compiled into the executable. + * - Create an instance of the class (the Check::Check() constructor registers the class as an addon that Cppcheck then can use). + * + * + * @section embedding_sec Embedding Cppcheck + * Cppcheck is designed to be easily embeddable into other programs. + * + * The "src/main.cpp" and "src/cppcheckexecutor.*" files illustrate how cppcheck + * can be embedded into an application. + * + * + * @section detailed_overview_sec Detailed overview + * This happens when you execute cppcheck from the command line: + * -# CppCheckExecutor::check this function executes the Cppcheck + * -# CppCheck::parseFromArgs parse command line arguments + * - The Settings class is used to maintain settings + * - Use FileLister and command line arguments to get files to check + * -# ThreadExecutor create more instances of CppCheck if needed + * -# CppCheck::check is called for each file. It checks a single file + * -# Preprocess the file (through Preprocessor) + * - Comments are removed + * - Macros are expanded + * -# Tokenize the file (see Tokenizer) + * -# Run the runChecks of all check classes. + * -# Simplify the tokenlist (Tokenizer::simplifyTokenList) + * -# Run the runSimplifiedChecks of all check classes + * + * When errors are found, they are reported back to the CppCheckExecutor through the ErrorLogger interface */