Misra C++ 2023 coverage

Total rules: 179

Number of implemented: 179

GuidelineTextCppcheck ID(s)
0.0.1A function shall not contain unreachable statementsunreachableCode
0.0.2Controlling expressions should not be invariantcompareBoolExpressionWithInt
compareValueOutOfTypeRangeError
identicalConditionAfterEarlyExit
identicalInnerCondition
knownConditionTrueFalse
0.1.1A value should not be unnecessarily written to a local objectredundantAssignInSwitch
redundantAssignment
redundantCopy
redundantInitialization
unreadVariable
0.1.2The value returned by a function shall be usedmisra-cpp-2023-0.1.2
0.2.1Variables with limited visibility should be used at least oncemisra-cpp-2023-0.2.1
0.2.2A named function parameter shall be used at least oncemisra-cpp-2023-0.2.2
0.2.3Types with limited visibility should be used at least oncemisra-cpp-2023-0.2.3
0.2.4Functions with limited visibility should be used at least oncemisra-cpp-2023-0.2.4
Dir 0.3.1Floating-point arithmetic should be used appropriatelyfloatConversionOverflow
Dir 0.3.2A function call shall not violate the function's preconditionsinvalidFunctionArg
invalidFunctionArgBool
invalidFunctionArgStr
4.1.1A program shall conform to ISO/IEC 14882:2017 (C++17)misra-cpp-2023-4.1.1
4.1.2Deprecated features should not be usedmisra-cpp-2023-4.1.2
4.1.3There shall be no occurrence of undefined or critical unspecifiederror
4.6.1Operations on a memory location shall be sequenced appropriatelyunknownEvaluationOrder
5.0.1Trigraph-like sequences should not be usedmisra-cpp-2023-5.0.1
5.7.1The character sequence /* shall not be used within a C-stylemisra-cpp-2023-5.7.1
Dir 5.7.2Sections of code should not be "commented out"misra-cpp-2023-5.7.2
5.7.3Line-splicing shall not be used in // commentsmisra-cpp-2023-5.7.3
5.10.1User-defined identifiers shall have an appropriate formmisra-cpp-2023-5.10.1
syntaxError
5.13.1Within character literals and non raw-string literals, \ shall only be used to form a defined escape sequence or universal character namemisra-cpp-2023-5.13.1
5.13.2Octal escape sequences, hexadecimal escape sequences and character names shall be terminatedmisra-cpp-2023-5.13.2
5.13.3Octal constants shall not be usedmisra-cpp-2023-5.13.3
5.13.4Unsigned integer literals shall be appropriately suffixedmisra-cpp-2023-5.13.4
5.13.5The lowercase form of L shall not be used as the first character in a literal suffixmisra-cpp-2023-5.13.5
5.13.6An integer-literal of type long long shall not use a single L or l in any suffixmisra-cpp-2023-5.13.6
5.13.7String literals with different encoding prefixes shall not be concatenatedmisra-cpp-2023-5.13.7
6.0.1Block scope declarations shall not be visually ambiguousmisra-cpp-2023-6.0.1
6.0.2When an array with external linkage is declared, its size should be explicitly specifiedmisra-cpp-2023-6.0.2
6.0.3The only declarations in the global namespace should be main, namespace declarations and extern "C" declarationsmisra-cpp-2023-6.0.3
6.0.4The identifier main shall not be used for a function other than the global function mainmisra-cpp-2023-6.0.4
6.2.1The one-definition rule shall not be violatedctuOneDefinitionRuleViolation
6.2.2All declarations of a variable or function shall have the same typemisra-cpp-2023-6.2.2
6.2.3The source code used to implement an entity shall appear only oncemisra-cpp-2023-6.2.3
6.2.4A header file shall not contain definitions of functions or objects that are non-inline and have external linkagemisra-cpp-2023-6.2.4
6.4.1A variable declared in an inner scope shall not hide a variable declared in an outer scopeshadowVariable
6.4.2Derived classes shall not conceal functions that are inherited from their basesmisra-cpp-2023-6.4.2
6.4.3A name that is present in a dependent base shall not be resolved by unqualified lookupmisra-cpp-2023-6.4.3
6.5.1A function or object with external linkage should be introduced in a header filemisra-cpp-2023-6.5.1
6.5.2Internal linkage should be specified appropriatelymisra-cpp-2023-6.5.2
6.7.1Local variables shall not have static storage durationmisra-cpp-2023-6.7.1
6.7.2Global variables shall not be usedmisra-cpp-2023-6.7.2
6.8.1An object shall not be accessed outside of its lifetimedanglingLifetime
6.8.2A function must not return a reference or a pointer to a local variable with automatic storage durationautoVariables
6.8.3An assignment operator shall not assign the address of an object with automatic storage duration to an object with a greater lifetimemisra-cpp-2023-6.8.3
6.8.4Member functions returning references to their object should be ref-qualified appropriatelymisra-cpp-2023-6.8.4
6.9.1The same type aliases shall be used in all declarations of the same entitymisra-cpp-2023-6.9.1
6.9.2The names of the standard signed integer types and standard unsigned integer types should not be usedmisra-cpp-2023-6.9.2
7.0.1There shall be no conversion from type boolmisra-cpp-2023-7.0.1
7.0.2There shall be no conversion to type boolmisra-cpp-2023-7.0.2
7.0.3The numerical value of a character shall not be usedmisra-cpp-2023-7.0.3
7.0.4The operands of bitwise operators and shift operators shall be appropriatemisra-cpp-2023-7.0.4
7.0.5Integral promotion and the usual arithmetic conversions shall not change the signedness or the type category of an operandmisra-cpp-2023-7.0.5
7.0.6Assignment between numeric types shall be appropriatemisra-cpp-2023-7.0.6
7.11.1nullptr shall be the only form of the null pointer constantmisra-cpp-2023-7.11.1
7.11.2An array passed as a function argument shall not decay to a pointermisra-cpp-2023-7.11.2
7.11.3A conversion from function type to pointer-to-function type shall only occur in appropriate contextsmisra-cpp-2023-7.11.3
8.0.1Parentheses should be used to make the meaning of an expression appropriately explicitmisra-cpp-2023-8.0.1
8.1.1A non-transient lambda shall not implicitly capture thismisra-cpp-2023-8.1.1
8.1.2Variables should be captured explicitly in a non-transient lambdamisra-cpp-2023-8.1.2
8.2.1A virtual base class shall only be cast to a derived class by means of dynamic_castmisra-cpp-2023-8.2.1
8.2.2C-style casts and functional notation casts shall not be usedmisra-cpp-2023-8.2.2
8.2.3A cast shall not remove any const or volatile qualification from the type accessed via a pointer or by referencemisra-cpp-2023-8.2.3
8.2.4Casts shall not be performed between a pointer to function and any other typemisra-cpp-2023-8.2.4
8.2.5reinterpret_cast shall not be usedmisra-cpp-2023-8.2.5
8.2.6An object with integral, enumerated, or pointer to void type shall not be cast to a pointer typemisra-cpp-2023-8.2.6
8.2.7A cast should not convert a pointer type to an integral typemisra-cpp-2023-8.2.7
8.2.8An object pointer type shall not be cast to an integral type other than std::uintptr_t or std::intptr_tmisra-cpp-2023-8.2.8
8.2.9The operand to typeid shall not be an expression of polymorphic class typemisra-cpp-2023-8.2.9
8.2.10Functions shall not call themselves, either directly or indirectlymisra-cpp-2023-8.2.10
8.2.11An argument passed via ellipsis shall have an appropriate typemisra-cpp-2023-8.2.11
8.3.1The built-in unary - operator should not be applied to an expression of unsigned typemisra-cpp-2023-8.3.1
8.3.2The built-in unary + operator should not be usedmisra-cpp-2023-8.3.2
8.7.1Pointer arithmetic shall not form an invalid pointerpointerOutOfBounds
pointerOutOfBoundsCond
8.7.2Subtraction between pointers shall only be applied to pointers that address elements of the same arraysubtractPointers
8.9.1The built-in relational operators >, >=, < and <= shall not be applied to objects of pointer type, except where they point to elements of the same arraycomparePointers
8.14.1The right-hand operand of a logical && or || operator should not contain persistent side effectsmisra-cpp-2023-8.14.1
8.18.1An object or subobject must not be copied to an overlapping objectoverlappingWriteUnion
8.18.2The result of an assignment operator should not be usedmisra-cpp-2023-8.18.2
8.19.1The comma operator should not be usedmisra-cpp-2023-8.19.1
8.20.1An unsigned arithmetic operation with constant operands should not wrapmisra-cpp-2023-8.20.1
9.2.1An explicit type conversion shall not be an expression statementmisra-cpp-2023-9.2.1
9.3.1The body of an iteration-statement or a selection-statement shall be a compound-statementmisra-cpp-2023-9.3.1
9.4.1All if ... else if constructs shall be terminated with an else statementmisra-cpp-2023-9.4.1
9.4.2The structure of a switch statement shall be appropriatemisra-cpp-2023-9.4.2
9.5.1Legacy for statements should be simplemisra-cpp-2023-9.5.1
9.5.2A for-range-initializer shall contain at most one function callmisra-cpp-2023-9.5.2
9.6.1The goto statement should not be usedmisra-cpp-2023-9.6.1
9.6.2A goto statement shall reference a label in a surrounding blockmisra-cpp-2023-9.6.2
9.6.3The goto statement shall jump to a label declared later in the function bodymisra-cpp-2023-9.6.3
9.6.4A function declared with the [[noreturn]] attribute shall not returnmisra-cpp-2023-9.6.4
9.6.5A function with non-void return type shall return a value on all pathsmissingReturn
10.0.1A declaration should not declare more than one variable or member variablemisra-cpp-2023-10.0.1
10.1.1The target type of a pointer or lvalue reference parameter should be const-qualified appropriatelyconstParameter
constParameterReference
10.1.2The volatile qualifier shall be used appropriatelymisra-cpp-2023-10.1.2
10.2.1An enumeration shall be defined with an explicit underlying typemisra-cpp-2023-10.2.1
10.2.2Unscoped enumerations should not be declaredmisra-cpp-2023-10.2.2
10.2.3The numeric value of an unscoped enumeration with no fixed underlying type shall not be usedmisra-cpp-2023-10.2.3
10.3.1There should be no unnamed namespaces in header filesmisra-cpp-2023-10.3.1
10.4.1The asm declaration shall not be usedmisra-cpp-2023-10.4.1
11.3.1Variables of array type should not be declaredmisra-cpp-2023-11.3.1
11.3.2The declaration of an object should contain no more than two levels of pointer indirectionmisra-cpp-2023-11.3.2
11.6.1All variables should be initializedmisra-cpp-2023-11.6.1
11.6.2The value of an object must not be read before it has been setuninitvar
11.6.3Within an enumerator list, the value of an implicitly-specified enumeration constant shall be uniquemisra-cpp-2023-11.6.3
12.2.1Bit-fields should not be declaredmisra-cpp-2023-12.2.1
12.2.2A bit-field shall have an appropriate typemisra-cpp-2023-12.2.2
12.2.3A named bit-field with signed integer type shall not have a length of one bitmisra-cpp-2023-12.2.3
12.3.1The union keyword shall not be usedmisra-cpp-2023-12.3.1
13.1.1Classes should not be inherited virtuallymisra-cpp-2023-13.1.1
13.1.2An accessible base class shall not be both virtual and non-virtual in the same hierarchymisra-cpp-2023-13.1.2
13.3.1User-declared member functions shall use the virtual, override and final specifiers appropriatelymisra-cpp-2023-13.3.1
13.3.2Parameters in an overriding virtual function shall not specify different default argumentsmisra-cpp-2023-13.3.2
13.3.3The parameters in all declarations or overrides of a function shall either be unnamed or have identical namesmisra-cpp-2023-13.3.3
13.3.4A comparison of a potentially virtual pointer to member function shall only be with nullptrmisra-cpp-2023-13.3.4
14.1.1Non-static data members should be either all private or all publicmisra-cpp-2023-14.1.1
15.0.1Special member functions shall be provided appropriatelymisra-cpp-2023-15.0.1
15.0.2User-provided copy and move member functions of a class should have appropriate signaturesmisra-cpp-2023-15.0.2
15.1.1An object's dynamic type shall not be used from within its constructor or destructorvirtualCallInConstructor
15.1.2All constructors of a class should explicitly initialize all of its virtual base classes and immediate base classesmisra-cpp-2023-15.1.2
15.1.3Conversion operators and constructors that are callable with a single argument shall be explicitmisra-cpp-2023-15.1.3
noExplicitConstructor
15.1.4All direct, non-static data members of a class should be initialized before the class object is accessibleuninitMemberVar
15.1.5A class shall only define an initializer-list constructor when it is the only constructormisra-cpp-2023-15.1.5
Dir 15.8.1User-provided copy assignment operators and move assignment operators shall handle self-assignmentoperatorEqToSelf
16.5.1The logical AND and logical OR operators shall not be overloadedmisra-cpp-2023-16.5.1
16.5.2The address-of operator shall not be overloadedmisra-cpp-2023-16.5.2
16.6.1Symmetrical operators should only be implemented as non-member functionsmisra-cpp-2023-16.6.1
17.8.1Function templates shall not be explicitly specializedmisra-cpp-2023-17.8.1
18.1.1An exception object shall not have pointer typemisra-cpp-2023-18.1.1
18.1.2An empty throw shall only occur within the compound-statement of a catch handlermisra-cpp-2023-18.1.2
18.3.1There should be at least one exception handler to catch all otherwise unhandled exceptionsmisra-cpp-2023-18.3.1
18.3.2An exception of class type shall be caught by const reference or referencemisra-cpp-2023-18.3.2
18.3.3Handlers for a function-try-block of a constructor or destructor shall not refer to non-static members from their class or its basesmisra-cpp-2023-18.3.3
18.4.1Exception-unfriendly functions shall be noexceptmisra-cpp-2023-18.4.1
18.5.1A noexcept function should not attempt to propagate an exception to the calling functionmisra-cpp-2023-18.5.1
18.5.2Program-terminating functions should not be usedmisra-cpp-2023-18.5.2
19.0.1A line whose first token is # shall be a valid preprocessing directivemisra-cpp-2023-19.0.1
19.0.2Function-like macros shall not be definedmisra-cpp-2023-19.0.2
19.0.3#include directives should only be preceded by preprocessor directives or commentsmisra-cpp-2023-19.0.3
19.0.4#undef should only be used for macros defined previously in the same filemisra-cpp-2023-19.0.4
19.1.1The defined preprocessor operator shall be used appropriatelymisra-cpp-2023-19.1.1
19.1.2All #else, #elif and #endif preprocessor directives shall reside in the same file as the #if, #ifdef or #ifndef directive to which they are relatedmisra-cpp-2023-19.1.2
19.1.3All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be defined prior to evaluationmisra-cpp-2023-19.1.3
19.2.1Precautions shall be taken in order to prevent the contents of a header file being included more than oncemisra-cpp-2023-19.2.1
19.2.2The #include directive shall be followed by either a <filename> or filename sequencemisra-cpp-2023-19.2.2
19.2.3The ' or " or \ characters and the /* or // character sequences shall not occur in a header file namemisra-cpp-2023-19.2.3
19.3.1The # and ## preprocessor operators should not be usedmisra-cpp-2023-19.3.1
19.3.2A macro parameter immediately following a # operator shall not be immediately followed by a ## operatormisra-cpp-2023-19.3.2
19.3.3The argument to a mixed-use macro parameter shall not be subject to further expansionmisra-cpp-2023-19.3.3
19.3.4Parentheses shall be used to ensure macro arguments are expanded appropriatelymisra-cpp-2023-19.3.4
19.3.5Tokens that look like a preprocessing directive shall not occur within a macro argumentpreprocessorErrorDirective
19.6.1The #pragma directive and the _Pragma operator should not be usedmisra-cpp-2023-19.6.1
21.2.1The library functions atof, atoi, atol and atoll from <cstdlib> shall not be usedmisra-cpp-2023-21.2.1
21.2.2The string handling functions from <cstring>, <cstdlib>, <cwchar> and <cinttypes> shall not be usedmisra-cpp-2023-21.2.2
21.2.3The library function system from <cstdlib> shall not be usedmisra-cpp-2023-21.2.3
21.2.4The macro offsetof shall not be usedmisra-cpp-2023-21.2.4
21.6.1Dynamic memory should not be usedmisra-cpp-2023-21.6.1
21.6.2Dynamic memory shall be managed automaticallymisra-cpp-2023-21.6.2
21.6.3Advanced memory management shall not be usedmisra-cpp-2023-21.6.3
21.6.4If a project defines either a sized or unsized version of a global operator delete, then both shall be definedmisra-cpp-2023-21.6.4
21.6.5A pointer to an incomplete class type shall not be deletedmisra-cpp-2023-21.6.5
21.10.1The features of <cstdarg> shall not be usedmisra-cpp-2023-21.10.1
21.10.2The standard header file <csetjmp> shall not be usedmisra-cpp-2023-21.10.2
21.10.3The facilities provided by the standard header file <csignal> shall not be usedmisra-cpp-2023-21.10.3
22.3.1The assert macro shall not be used with a constant-expressionmisra-cpp-2023-22.3.1
22.4.1The literal value zero shall be the only value assigned to errnomisra-cpp-2023-22.4.1
23.11.1The raw pointer constructors of std::shared_ptr and std::unique_ptr should not be usedmisra-cpp-2023-23.11.1
24.5.1The character handling functions from <cctype> and <cwctype> shall not be usedmisra-cpp-2023-24.5.1
24.5.2The C++ Standard Library functions memcpy, memmove and memcmp from <cstring> shall not be usedmisra-cpp-2023-24.5.2
25.5.1The setlocale and std::locale::global functions shall not be calledmisra-cpp-2023-25.5.1
25.5.2The pointers returned by the C++ Standard Library functions localeconv, getenv, setlocale or strerror must only be used as if they have pointer to const-qualified typemisra-cpp-2023-25.5.2
25.5.3The pointer returned by the C++ Standard Library functions asctime, ctime, gmtime, localtime, localeconv, getenv, setlocale or strerror must not be used following a subsequent call to the same functionmisra-cpp-2023-25.5.3
26.3.1std::vector should not be specialized with boolmisra-cpp-2023-26.3.1
28.3.1Predicates shall not have persistent side effectsmisra-cpp-2023-28.3.1
28.6.1The argument to std::move shall be a non-const lvaluemisra-cpp-2023-28.6.1
28.6.2Forwarding references and std::forward shall be used togethermisra-cpp-2023-28.6.2
28.6.3An object shall not be used while in a potentially moved-from stateaccessForwarded
accessMoved
28.6.4The result of std::remove, std::remove_if, std::unique and empty shall be usedignoredReturnValue
30.0.1The C Library input/output functions shall not be usedmisra-cpp-2023-30.0.1
30.0.2Reads and writes on the same file stream shall be separated by a positioning operationmisra-cpp-2023-30.0.2