| MisraC++2023 |
Category |
Decidability |
Guideline Type | C/C++ Warning Classes |
| MisraC++2023:0.0.1 A function shall not contain unreachable statements |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:0.0.2 Controlling expressions should not be invariant |
Advisory |
Undecidable |
Rule | |
| MisraC++2023:0.1.1 A value should not be unnecessarily written to a local object |
Advisory |
Undecidable |
Rule | |
| MisraC++2023:0.1.2 The value returned by a function shall be used |
Required |
Decidable |
Rule | |
| MisraC++2023:0.2.1 Variables with limited visibility should be used at least once |
Advisory |
Decidable |
Rule | |
| MisraC++2023:0.2.2 Any named function parameter shall be used at least once |
Required |
Decidable |
Rule | |
| MisraC++2023:0.2.3 Types with limited visibility should be used at least once |
Advisory |
Decidable |
Rule | |
| MisraC++2023:0.3.1 Floating-point arithmetic should be used appropriately |
Advisory |
Undecidable |
Directive | |
| MisraC++2023:4.1.1 A program shall conform to ISO/IEC 14882:2017 (C++17) |
Required |
Undecidable |
Rule | |
| MisraC++2023:4.1.2 Deprecated features should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:4.1.3 There shall be no occurrence of undefined or critical unspecified behaviour |
Required |
Undecidable |
Rule |
| closely mapped |
|
| also related |
|
| hierarchy ancestor |
|
|
| MisraC++2023:4.6.1 Operations on a memory location shall be sequenced appropriately |
Required |
Undecidable |
Rule | |
| MisraC++2023:5.0.1 Trigraph-like sequences should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:5.7.1 The character sequence /* shall not be used within a C-style comment |
Required |
Decidable |
Rule | |
| MisraC++2023:5.7.2 Sections of code should not be "commented out" |
Advisory |
Undecidable |
Directive | |
| MisraC++2023:5.7.3 Line-splicing shall not be used in // comments |
Required |
Decidable |
Rule | |
| MisraC++2023:5.13.2 Octal and hexadecimal escape sequences shall be terminated |
Required |
Decidable |
Rule | |
| MisraC++2023:5.13.3 Octal constants shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:5.13.4 Unsigned integer literals shall be appropriately suffixed |
Required |
Decidable |
Rule | |
| MisraC++2023:5.13.5 The lowercase form of "L" shall not be used as the first character in a literal suffix |
Required |
Decidable |
Rule | |
| MisraC++2023:6.0.1 Block scope declarations shall not be visually ambiguous |
Required |
Decidable |
Rule | |
| MisraC++2023:6.0.2 When an array with external linkage is declared, its size should be explicitly specified |
Advisory |
Decidable |
Rule | |
| MisraC++2023:6.0.3 The only declarations in the global namespace shall be main, namespace declarations and extern "C" declarations |
Advisory |
Decidable |
Rule | |
| MisraC++2023:6.2.1 The one-definition rule shall not be violated |
Required |
Decidable |
Rule | |
| MisraC++2023:6.2.2 All declarations of a variable or function shall have the same type |
Required |
Decidable |
Rule | |
| MisraC++2023:6.2.3 The source code used to implement an entity shall appear only once |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:6.2.4 A header file shall not contain definitions of functions or objects that are non-inline and have external linkage |
Required |
Decidable |
Rule | |
| MisraC++2023:6.4.1 A variable declared in an inner scope shall not hide a variable declared in an outer scope |
Required |
Decidable |
Rule | |
| MisraC++2023:6.4.2 Derived classes shall not conceal functions that are inherited from their bases |
Required |
Decidable |
Rule | |
| MisraC++2023:6.5.2 Internal linkage should be specified appropriately |
Advisory |
Decidable |
Rule | |
| MisraC++2023:6.8.1 An object shall not be accessed outside of its lifetime |
Required |
Undecidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:6.8.2 A function must not return a reference or a pointer to a local variable with automatic storage duration |
Mandatory |
Decidable |
Rule | |
| MisraC++2023:6.8.3 An assignment operator shall not assign the address of an object with automatic storage duration to an object with a greater lifetime |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:6.9.1 The same type aliases shall be used in all declarations and re- declarations of the same entity |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:6.9.2 The names of the standard signed integer types and standard unsigned integer types should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:7.0.1 There shall be no conversion from type bool |
Required |
Decidable |
Rule | |
| MisraC++2023:7.0.3 The numerical value of a character shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:7.0.4 The operands of bitwise operators and shift operators shall be appropriate |
Required |
Decidable |
Rule | |
| MisraC++2023:7.0.5 Integral promotion and the usual arithmetic conversions shall not change the signedness or the type category of an operand |
Required |
Decidable |
Rule | |
| MisraC++2023:7.0.6 Assignment between numeric types shall be appropriate |
Required |
Decidable |
Rule | |
| MisraC++2023:7.11.1 nullptr shall be the only form of the null-pointer-constant |
Required |
Decidable |
Rule | |
| MisraC++2023:7.11.2 An array passed as a function argument shall not decay to a pointer |
Required |
Decidable |
Rule | |
| MisraC++2023:7.11.3 A conversion from function type to pointer-to-function type shall only occur in appropriate contexts |
Required |
Decidable |
Rule | |
| MisraC++2023:8.0.1 Parentheses should be used to make the meaning of an expression appropriately explicit |
Advisory |
Decidable |
Rule | |
| MisraC++2023:8.1.2 Variables should be captured explicitly in a non-transient lambda |
Advisory |
Decidable |
Rule | |
| MisraC++2023:8.2.1 A virtual base class shall only be cast to a derived class by means of dynamic_cast |
Required |
Decidable |
Rule | |
| MisraC++2023:8.2.2 C-style casts and functional notation casts shall not be used |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:8.2.3 A cast shall not remove any const or volatile qualification from the type accessed via a pointer or by reference |
Required |
Decidable |
Rule | |
| MisraC++2023:8.2.4 Casts shall not be performed between a pointer to a function and any other type |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:8.2.5 reinterpret_cast shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:8.2.6 An object with integral, enumerated, or pointer to void type shall not be converted to an object with pointer type |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:8.2.7 A cast should not convert a pointer type to an integral type |
Advisory |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:8.2.10 Functions shall not call themselves, either directly or indirectly |
Required |
Undecidable |
Rule | |
| MisraC++2023:8.2.11 An argument passed via ellipsis shall have an appropriate type |
Required |
Decidable |
Rule | |
| MisraC++2023:8.3.1 The built-in unary - operator should not be applied to an expression of unsigned type |
Advisory |
Decidable |
Rule | |
| MisraC++2023:8.7.1 Pointer arithmetic shall not form an invalid pointer |
Required |
Undecidable |
Rule |
| closely mapped |
|
| also related |
|
|
| MisraC++2023:8.7.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array |
Required |
Undecidable |
Rule | |
| MisraC++2023:8.9.1 The built-in relational operators >, >=, < and <= shall not be applied to objects of pointer type, except where they point to elements of the same array |
Required |
Undecidable |
Rule | |
| MisraC++2023:8.14.1 The right hand operand of a logical && or || operator shall not contain persistent side effects |
Advisory |
Undecidable |
Rule |
| closely mapped |
|
| also related |
|
|
| MisraC++2023:8.18.1 An object or sub-object must not be copied to an overlapping object |
Mandatory |
Undecidable |
Rule | |
| MisraC++2023:8.18.2 The result of an assignment operator should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:8.19.1 The comma operator should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:8.20.1 An unsigned arithmetic operation with constant operands should not wrap |
Advisory |
Decidable |
Rule |
| closely mapped |
|
| also related |
|
|
| MisraC++2023:9.3.1 The body of an iteration-statement or a selection-statement shall be a compound-statement |
Required |
Decidable |
Rule | |
| MisraC++2023:9.4.1 All if ... else if constructs shall be terminated with an else statement |
Required |
Decidable |
Rule | |
| MisraC++2023:9.4.2 The structure of a switch statement shall be appropriate |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:9.5.1 Legacy for statements should be simple |
Advisory |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:9.6.1 The goto statement should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:9.6.2 A goto statement shall reference a label in a surrounding block |
Required |
Decidable |
Rule | |
| MisraC++2023:9.6.3 The goto statement shall jump to a label declared later in the function body |
Required |
Decidable |
Rule | |
| MisraC++2023:9.6.4 A function declared with the [[noreturn]] attribute shall not return |
Required |
Undecidable |
Rule | |
| MisraC++2023:9.6.5 A function with non-void return type shall return a value on all paths |
Required |
Decidable |
Rule |
| closely mapped |
|
| also related |
|
| hierarchy ancestor |
|
|
| MisraC++2023:10.0.1 A declaration shall not declare more than one variable or member variable |
Advisory |
Decidable |
Rule | |
| MisraC++2023:10.1.1 The target type of a pointer or lvalue reference parameter should be const-qualified appropriately |
Advisory |
Decidable |
Rule | |
| MisraC++2023:10.1.2 Volatile qualification shall be used appropriately |
Required |
Decidable |
Rule |
| closely mapped |
|
| also related |
|
|
| MisraC++2023:10.3.1 There shall be no unnamed namespaces in header files |
Advisory |
Decidable |
Rule | |
| MisraC++2023:10.4.1 The asm declaration shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:11.3.2 The declaration of objects should contain no more than two levels of pointer indirection |
Advisory |
Decidable |
Rule | |
| MisraC++2023:11.6.1 All variables should be initialized |
Advisory |
Decidable |
Rule | |
| MisraC++2023:11.6.2 The value of an object shall not be read before it has been set |
Mandatory |
Undecidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:11.6.3 Within an enumerator list, the value of an implicitly-specified enumeration constant shall be unique |
Required |
Decidable |
Rule | |
| MisraC++2023:12.2.1 Bit fields should not be declared |
Advisory |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:12.2.2 A bit-field shall have an appropriate type |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:12.2.3 A named bit-field with signed integer type shall not have a length of one bit |
Required |
Decidable |
Rule | |
| MisraC++2023:12.3.1 The union keyword shall not be used |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:13.1.1 Classes should not be inherited virtually |
Advisory |
Decidable |
Rule | |
| MisraC++2023:13.1.2 An accessible base class shall not be both virtual and non-virtual in the same hierarchy |
Required |
Decidable |
Rule | |
| MisraC++2023:13.3.1 User-declared member functions shall use the virtual, override and final specifiers appropriately |
Required |
Decidable |
Rule | |
| MisraC++2023:13.3.2 Parameters in an overriding virtual function shall not introduce different default arguments |
Required |
Decidable |
Rule | |
| MisraC++2023:13.3.3 The parameters in all declarations or overrides of a function shall either be unnamed or have identical names |
Required |
Decidable |
Rule | |
| MisraC++2023:13.3.4 A comparison of a potentially virtual pointer to member shall only be with nullptr |
Required |
Decidable |
Rule | |
| MisraC++2023:15.0.2 User-provided copy and move member functions of a class should have appropriate signatures |
Advisory |
Decidable |
Rule | |
| MisraC++2023:15.1.1 An object's dynamic type shall not be used from within its constructor or destructor |
Required |
Undecidable |
Rule | |
| MisraC++2023:15.8.1 User-provided copy assignment and move assignment operators shall handle self-assignment |
Required |
Undecidable |
Rule | |
| MisraC++2023:16.5.1 The logical AND and logical OR operators shall not be overloaded |
Required |
Decidable |
Rule | |
| MisraC++2023:16.5.2 The address-of operator shall not be overloaded |
Required |
Decidable |
Rule | |
| MisraC++2023:18.1.2 An empty throw shall only occur within the compound-statement of a catch handler |
Required |
Decidable |
Rule | |
| MisraC++2023:18.3.2 An exception of class type shall be caught by const reference or reference |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:18.5.1 A noexcept function should not attempt to propagate an exception to the calling function |
Advisory |
Undecidable |
Rule | |
| MisraC++2023:18.5.2 Program-terminating functions should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:19.0.1 A line whose first token is # shall be a valid preprocessing directive |
Required |
Decidable |
Rule | |
| MisraC++2023:19.0.2 Function-like macros shall not be defined |
Required |
Decidable |
Rule | |
| MisraC++2023:19.0.3 #include directives should only be preceded by preprocessor directives or comments |
Advisory |
Decidable |
Rule | |
| MisraC++2023:19.0.4 #undef should only be used for macros defined previously in the same file |
Advisory |
Decidable |
Rule | |
| MisraC++2023:19.1.1 The defined preprocessor operator shall be used appropriately |
Required |
Decidable |
Rule | |
| MisraC++2023:19.1.2 All #else, #elif and #endif preprocessor directives shall reside in the same file as the #if, #ifdef or #ifndef directive to which they are related |
Required |
Decidable |
Rule | |
| MisraC++2023:19.1.3 All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd at the point of evaluation |
Required |
Decidable |
Rule | |
| MisraC++2023:19.2.2 The #include directive shall be followed by either a <filename> or "filename" sequence |
Required |
Decidable |
Rule | |
| MisraC++2023:19.2.3 The ', \ or " characters and the /* or // character sequences shall not occur in a header file name |
Required |
Decidable |
Rule | |
| MisraC++2023:19.3.1 The # and ## preprocessor operators should not be used |
Advisory |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:19.3.2 A macro parameter immediately following a # operator shall not immediately be followed by a ## operator |
Required |
Decidable |
Rule | |
| MisraC++2023:19.3.3 The argument to a mixed-use macro parameter shall not be subject to further expansion |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:19.3.4 Parentheses shall be used to ensure macro arguments are expanded appropriately |
Required |
Decidable |
Rule | |
| MisraC++2023:19.3.5 Tokens that look like a preprocessing directive shall not occur within a macro argument |
Required |
Decidable |
Rule | |
| MisraC++2023:19.6.1 The #pragma directive and the _Pragma operator should not be used |
Advisory |
Decidable |
Rule | |
| MisraC++2023:21.2.1 The library functions atof, atoi, atol and atoll from <cstdlib> shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:21.2.2 The string handling functions from <cstring>, <cstdlib>, <cwchar> and <cinttypes> shall not be used |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:21.2.3 The Standard Library function system of <cstdlib> shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:21.2.4 The macro offsetof shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:21.6.1 Dynamic memory shall not be used |
Advisory |
Undecidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:21.6.2 Dynamic memory shall be managed automatically |
Required |
Decidable |
Rule | |
| MisraC++2023:21.10.1 The features of <cstdarg> shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:21.10.2 The standard header file <csetjmp> shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:21.10.3 The facilities provided by the standard header file <csignal> shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:24.5.2 The C++ Standard Library functions memcpy, memmove and memcmp from <cstring> shall not be used |
Required |
Decidable |
Rule | |
| MisraC++2023:25.5.1 The setlocale and std::locale::global functions shall not be called |
Required |
Decidable |
Rule | |
| MisraC++2023:25.5.2 The pointers returned by the Standard Library functions localeconv, getenv, setlocale or, strerror must only be used as if they have pointer to const-qualified type |
Mandatory |
Decidable |
Rule | |
| MisraC++2023:25.5.3 The 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 function |
Mandatory |
Undecidable |
Rule | |
| MisraC++2023:28.6.3 An object shall not be used while in a potentially moved-from state |
Required |
Decidable |
Rule | |
| MisraC++2023:30.0.1 The C Library input/output functions shall not be used |
Required |
Decidable |
Rule |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2023:30.0.2 Reads and writes on the same file stream shall be separated by a positioning operation |
Required |
Undecidable |
Rule | |
| MisraC++2008 |
Category | C/C++ Warning Classes |
| MisraC++2008:0-1-1 A project shall not contain unreachable code. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:0-1-2 A project shall not contain infeasible paths. |
Required | |
| MisraC++2008:0-1-3 A project shall not contain unused variables. |
Required | |
| MisraC++2008:0-1-4 A project shall not contain non-volatile POD variables having only one use. |
Required | |
| MisraC++2008:0-1-5 A project shall not contain unused type declarations. |
Required | |
| MisraC++2008:0-1-6 A project shall not contain instances of non-volatile variables being given values that are never subsequently used. |
Required | |
| MisraC++2008:0-1-7 The value returned by a function having a non-void return type that is not an overloaded operator shall always be used. |
Required | |
| MisraC++2008:0-1-8 All functions with void return type shall have external side effect(s). |
Required | |
| MisraC++2008:0-1-9 There shall be no dead code. |
Required | |
| MisraC++2008:0-1-10 Every defined function shall be called at least once. |
Required | |
| MisraC++2008:0-1-11 There shall be no unused parameters (named or unnamed) in non-virtual functions. |
Required | |
| MisraC++2008:0-1-12 There shall be no unused parameters (named or unnamed) in the set of parameters for a virtual function and all the functions that override it. |
Required | |
| MisraC++2008:0-2-1 An object shall not be assigned to an overlapping object. |
Required | |
| MisraC++2008:0-3-1 Minimization of run-time failures shall be ensured by the use of at least one of:(a) static analysis tools/techniques; (b) dynamic analysis tools/techniques; (c) explicit coding of checks to handle run-time faults. |
Document | |
| MisraC++2008:0-3-2 If a function generates error information, then that error information shall be tested. |
Required | |
| MisraC++2008:2-3-1 Trigraphs shall not be used. |
Required | |
| MisraC++2008:2-7-1 The character sequence /* shall not be used within a C-style comment. |
Required | |
| MisraC++2008:2-7-2 Sections of code shall not be "commented out" using C-style comments. |
Required | |
| MisraC++2008:2-7-3 Sections of code should not be "commented out" using C++ comments. |
Advisory | |
| MisraC++2008:2-10-1 Different identifiers shall be typographically unambiguous. |
Required | |
| MisraC++2008:2-10-2 Identifiers declared in an inner scope shall not hide an identifier declared in an outer scope. |
Required | |
| MisraC++2008:2-10-3 A typedef name (including qualification, if any) shall be a unique identifier. |
Required | |
| MisraC++2008:2-10-4 A class, union or enum name (including qualification, if any) shall be a unique identifier. |
Required | |
| MisraC++2008:2-10-5 The identifier name of a non-member object or function with static storage duration should not be reused. |
Advisory | |
| MisraC++2008:2-10-6 If an identifier refers to a type, it shall not also refer to an object or a function in the same scope. |
Required | |
| MisraC++2008:2-13-2 Octal constants (other than zero) and octal escape sequences (other than "\0") shall not be used. |
Required | |
| MisraC++2008:2-13-3 A "U" suffix shall be applied to all octal or hexadecimal integer literals of unsigned type. |
Required | |
| MisraC++2008:2-13-4 Literal suffixes shall be upper case. |
Required | |
| MisraC++2008:3-1-1 It shall be possible to include any header file in multiple translation units without violating the One Definition Rule. |
Required | |
| MisraC++2008:3-1-2 Functions shall not be declared at block scope. |
Required | |
| MisraC++2008:3-1-3 When an array is declared, its size shall either be stated explicitly or defined implicitly by initialization. |
Required | |
| MisraC++2008:3-2-1 All declarations of an object or function shall have compatible types. |
Required | |
| MisraC++2008:3-2-2 The One Definition Rule shall not be violated. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:3-2-3 A type, object or function that is used in multiple translation units shall be declared in one and only one file. |
Required | |
| MisraC++2008:3-2-4 An identifier with external linkage shall have exactly one definition. |
Required | |
| MisraC++2008:3-3-2 If a function has internal linkage then all re-declarations shall include the static storage class specifier. |
Required | |
| MisraC++2008:3-4-1 An identifier declared to be an object or type shall be defined in a block that minimizes its visibility. |
Required | |
| MisraC++2008:3-9-1 The types used for an object, a function return type, or a function parameter shall be token-for-token identical in all declarations and re-declarations. |
Required | |
| MisraC++2008:3-9-2 typedefs that indicate size and signedness should be used in place of the basic numerical types. |
Advisory | |
| MisraC++2008:3-9-3 The underlying bit representations of floating-point values shall not be used. |
Required | |
| MisraC++2008:4-5-1 Expressions with type bool shall not be used as operands to built-in operators other than the assignment operator = , the logical operators && , || , ! , the equality operators == and != , the unary & operator, and the conditional operator. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:4-5-2 Expressions with type enum shall not be used as operands to built-in operators other than the subscript operator [ ] , the assignment operator = , the equality operators == and != , the unary & operator, and the relational operators < , <= , > , >= . |
Required | |
| MisraC++2008:4-5-3 Expressions with type (plain) char and wchar_t shall not be used as operands to built-in operators other than the assignment operator = , the equality operators == and != , and the unary & operator. |
Required | |
| MisraC++2008:4-10-1 NULL shall not be used as an integer value. |
Required | |
| MisraC++2008:4-10-2 Literal zero (0) shall not be used as the null-pointer-constant. |
Required | |
| MisraC++2008:5-0-1 The value of an expression shall be the same under any order of evaluation that the standard permits. |
Required | |
| MisraC++2008:5-0-2 Limited dependence should be placed on C++ operator precedence rules in expressions. |
Advisory | |
| MisraC++2008:5-0-3 A cvalue expression shall not be implicitly converted to a different underlying type. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-0-4 An implicit integral conversion shall not change the signedness of the underlying type. |
Required | |
| MisraC++2008:5-0-5 There shall be no implicit floating-integral conversions. |
Required | |
| MisraC++2008:5-0-6 An implicit integral or floating-point conversion shall not reduce the size of the underlying type. |
Required | |
| MisraC++2008:5-0-7 There shall be no explicit floating-integral conversions of a cvalue expression. |
Required | |
| MisraC++2008:5-0-8 An explicit integral or floating-point conversion shall not increase the size of the underlying type of a cvalue expression. |
Required | |
| MisraC++2008:5-0-9 An explicit integral conversion shall not change the signedness of the underlying type of a cvalue expression. |
Required | |
| MisraC++2008:5-0-10 If the bitwise operators ~ and << are applied to an operand with an underlying type of unsigned char or unsigned short, the result shall be immediately cast to the underlying type of the operand. |
Required | |
| MisraC++2008:5-0-11 The plain char type shall only be used for the storage and use of character values. |
Required | |
| MisraC++2008:5-0-12 signed char and unsigned char type shall only be used for the storage and use of numeric values. |
Required | |
| MisraC++2008:5-0-13 The condition of an if-statement and the condition of an iteration-statement shall have type bool. |
Required | |
| MisraC++2008:5-0-14 The first operand of a conditional-operator shall have type bool. |
Required | |
| MisraC++2008:5-0-15 Array indexing shall be the only form of pointer arithmetic. |
Required | |
| MisraC++2008:5-0-16 A pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array. |
Required | |
| MisraC++2008:5-0-17 Subtraction between pointers shall only be applied to pointers that address elements of the same array. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-0-18 > , >= , < , <= shall not be applied to objects of pointer type, except where they point to the same array. |
Required | |
| MisraC++2008:5-0-19 The declaration of objects shall contain no more than two levels of pointer indirection. |
Required | |
| MisraC++2008:5-0-20 Non-constant operands to a binary bitwise operator shall have the same underlying type. |
Required | |
| MisraC++2008:5-0-21 Bitwise operators shall only be applied to operands of unsigned underlying type. |
Required | |
| MisraC++2008:5-2-1 Each operand of a logical && or || shall be a postfix-expression. |
Required | |
| MisraC++2008:5-2-2 A pointer to a virtual base class shall only be cast to a pointer to a derived class by means of dynamic_cast. |
Required | |
| MisraC++2008:5-2-4 C-style casts (other than void casts) and functional notation casts (other than explicit constructor calls) shall not be used. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-2-5 A cast shall not remove any const or volatile qualification from the type of a pointer or reference. |
Required | |
| MisraC++2008:5-2-6 A cast shall not convert a pointer to a function to any other pointer type, including a pointer to function type. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-2-7 An object with pointer type shall not be converted to an unrelated pointer type, either directly or indirectly. |
Required | |
| MisraC++2008:5-2-8 An object with integer type or pointer to void type shall not be converted to an object with pointer type. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-2-9 A cast should not convert a pointer type to an integral type. |
Advisory |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-2-10 The increment ( ++ ) and decrement ( -- ) operators should not be mixed with other operators in an expression. |
Advisory |
| closely mapped |
|
| also related |
|
|
| MisraC++2008:5-2-11 The comma operator, && operator and the || operator shall not be overloaded. |
Required | |
| MisraC++2008:5-2-12 An identifier with array type passed as a function argument shall not decay to a pointer. |
Required | |
| MisraC++2008:5-3-1 Each operand of the ! operator, the logical && or the logical || operators shall have type bool. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:5-3-2 The unary minus operator shall not be applied to an expression whose underlying type is unsigned. |
Required | |
| MisraC++2008:5-3-3 The unary & operator shall not be overloaded. |
Required | |
| MisraC++2008:5-3-4 Evaluation of the operand to the sizeof operator shall not contain side effects. |
Required | |
| MisraC++2008:5-8-1 The right hand operand of a shift operator shall lie between zero and one less than the width in bits of the underlying type of the left hand operand. |
Required | |
| MisraC++2008:5-14-1 The right hand operand of a logical && or || operator shall not contain side effects. |
Required |
| closely mapped |
|
| also related |
|
|
| MisraC++2008:5-18-1 The comma operator shall not be used. |
Required | |
| MisraC++2008:5-19-1 Evaluation of constant unsigned integer expressions should not lead to wrap-around. |
Advisory | |
| MisraC++2008:6-2-1 Assignment operators shall not be used in sub-expressions. |
Required | |
| MisraC++2008:6-2-2 Floating-point expressions shall not be directly or indirectly tested for equality or inequality. |
Required | |
| MisraC++2008:6-2-3 Before preprocessing, a null statement shall only occur on a line ny itself; it may be followed by a comment, provided that the first character following the null statement is a white-space character. |
Required | |
| MisraC++2008:6-3-1 The statement forming the body of a switch, while, do ... while or for statement shall be a compound statement. |
Required | |
| MisraC++2008:6-4-1 An if ( condition ) construct shall be followed by a compound statement. The else keyword shall be followed by either a compound statement, or another if statement. |
Required | |
| MisraC++2008:6-4-2 All if ... else if constructs shall be terminated with an else clause. |
Required | |
| MisraC++2008:6-4-3 A switch statement shall be a well-formed switch statement. |
Required | |
| MisraC++2008:6-4-4 A switch-label shall only be used when the most closely-enclosing compound statement is the body of a switch statement. |
Required | |
| MisraC++2008:6-4-5 An unconditional throw or break statement shall terminate every non-empty switch-clause. |
Required | |
| MisraC++2008:6-4-6 The final clause of a switch statement shall be the default-clause. |
Required | |
| MisraC++2008:6-4-7 The condition of a switch statement shall not have bool type. |
Required | |
| MisraC++2008:6-4-8 Every switch statement shall have at least one case-clause. |
Required | |
| MisraC++2008:6-5-1 A for loop shall contain a single loop-counter which shall not have floating type. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:6-5-3 The loop-counter shall not be modified within condition or statement. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:6-5-4 The loop-counter shall be modified by one of -- , ++ , -=n , or +=n; where n remains constant for the duration of the loop. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:6-5-5 A loop-control-variable other than the loop-counter shall not be modified within condition or expression. |
Required | |
| MisraC++2008:6-6-1 Any label referenced by a goto statement shall be declared in the same block, or in a block enclosing the goto statement. |
Required | |
| MisraC++2008:6-6-2 The goto statement shall jump to a label declared later in the same function body. |
Required | |
| MisraC++2008:6-6-3 The continue statement shall only be used within a well-formed for loop. |
Required | |
| MisraC++2008:6-6-4 For any iteration statement there shall be no more than one break or goto statement used for loop termination. |
Required | |
| MisraC++2008:6-6-5 A function shall have a single point of exit at the end of the function. |
Required | |
| MisraC++2008:7-1-1 A variable which is not modified shall be const qualified. |
Required | |
| MisraC++2008:7-1-2 A pointer or reference parameter in a function shall be declared as pointer to const or reference to const if the corresponding object is not modified. |
Required | |
| MisraC++2008:7-2-1 An expression with enum underlying type shall only have values corresponding to the enumerators of the enumeration. |
Required | |
| MisraC++2008:7-3-1 The global namespace shall only contain main, namespace declarations and extern "C" declarations. |
Required | |
| MisraC++2008:7-3-3 There shall be no unnamed namespaces in header files. |
Required | |
| MisraC++2008:7-3-4 using-directives shall not be used. |
Required | |
| MisraC++2008:7-3-5 Multiple declarations for an identifier in the same namespace shall not straddle a using-declaration for that identifier. |
Required | |
| MisraC++2008:7-3-6 using-directives and using-declarations (excluding class scope or function scope using-declarations) shall not be used in header files. |
Required | |
| MisraC++2008:7-4-1 All usage of assembler shall be documented. |
Document | |
| MisraC++2008:7-4-2 Assembler instructions shall only be introduced using the asm declaration. |
Required | |
| MisraC++2008:7-4-3 Assembly language shall be encapsulated and isolated. |
Required | |
| MisraC++2008:7-5-1 A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function. |
Required | |
| MisraC++2008:7-5-2 The address of an object with automatic storage shall not be assigned to another object that may persist after the first object has ceased to exist. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:7-5-4 Functions should not call themselves, either directly or indirectly. |
Advisory | |
| MisraC++2008:8-0-1 An init-declarator-list or a member-declarator-list shall consist of a single init-declarator or member-declarator respectively. |
Required | |
| MisraC++2008:8-3-1 Parameters in an overriding virtual function shall either use the same default arguments as the function they override, or else shall not specify any default arguments. |
Required | |
| MisraC++2008:8-4-1 Functions shall not be defined using the ellipsis notation. |
Required | |
| MisraC++2008:8-4-2 The identifiers used for the parameters in a re-declaration of a function shall be identical to those in the declaration. |
Required | |
| MisraC++2008:8-4-3 All exit paths from a function with non-void return type shall have an explicit return statement with an expression. |
Required |
| closely mapped |
|
| also related |
|
| hierarchy ancestor |
|
|
| MisraC++2008:8-4-4 A function identifier shall either be used to call the function or it shall be preceded by &. |
Required | |
| MisraC++2008:8-5-1 All variables shall have a defined value before they are used. |
Required |
| closely mapped |
|
| also related |
|
|
| MisraC++2008:8-5-2 Braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:8-5-3 In an enumerator list, the = construct shall not be used to explicitly initialize members other than the first, unless all items are explicitly initialized. |
Required | |
| MisraC++2008:9-3-3 If a member function can be made static then it shall be made static, otherwise if it can be made const then it shall be made const. |
Required | |
| MisraC++2008:9-5-1 Unions shall not be used. |
Required | |
| MisraC++2008:9-6-1 When the absolute partitioning of bits representing a bit-field is required, then the behaviour and packing of bit-fields shall be documented. |
Document | |
| MisraC++2008:9-6-2 Bit-fields shall be either bool type or an explicitly unsigned or signed integral type. |
Required | |
| MisraC++2008:9-6-3 Bit-fields shall not have enum type. |
Required | |
| MisraC++2008:9-6-4 Named bit-fields with signed integer type shall have a length of more than one bit. |
Required | |
| MisraC++2008:10-1-1 Classes should not be derived from virtual bases. |
Advisory | |
| MisraC++2008:10-1-2 A base class shall only be declared virtual if it is used in a diamond hierarchy. |
Required | |
| MisraC++2008:10-1-3 An accessible base class shall not be both virtual and non-virtual in the same hierarchy. |
Required | |
| MisraC++2008:12-1-1 An object's dynamic type shall not be used from the body of its constructor or destructor. |
Required | |
| MisraC++2008:12-8-1 A copy constructor shall only initialize its base classes and the non- static members of the class of which it is a member. |
Required | |
| MisraC++2008:12-8-2 The copy assignment operator shall be declared protected or private in an abstract class. |
Required | |
| MisraC++2008:14-7-3 All partial and explicit specializations for a template shall be declared in the same file as the declaration of their primary template. |
Required | |
| MisraC++2008:15-1-2 NULL shall not be thrown explicitly. |
Required | |
| MisraC++2008:15-1-3 An empty throw ( throw; ) shall only be used in the compound-statement of a catch handler. |
Required | |
| MisraC++2008:15-3-5 A class type exception shall always be caught by reference. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:15-3-6 Where multiple handlers are provided in a single try-catch statement or function-try-block for a derived class and some or all of its bases, the handlers shall be ordered most-derived to base class. |
Required | |
| MisraC++2008:15-3-7 Where multiple handlers are provided in a single try-catch statement or function-try-block, any ellipsis (catch-all) handler shall occur last. |
Required | |
| MisraC++2008:16-0-1 #include directives in a file shall only be preceded by preprocessor directives or comments. |
Required | |
| MisraC++2008:16-0-2 Macros shall only be #define'd or #undef'd in the global namespace. |
Required | |
| MisraC++2008:16-0-3 #undef shall not be used. |
Required | |
| MisraC++2008:16-0-4 Function-like macros shall not be defined. |
Required | |
| MisraC++2008:16-0-5 Arguments to a function-like macro shall not contain tokens that look like preprocessing directives. |
Required | |
| MisraC++2008:16-0-6 In the definition of a function-like macro, each instance of a parameter shall be enclosed in parentheses, unless it is used as the operand of # or ## . |
Required | |
| MisraC++2008:16-0-7 Undefined macro identifiers shall not be used in #if or #elif preprocessor directives, except as operands to the defined operator. |
Required | |
| MisraC++2008:16-0-8 If the # token appears as the first token on a line, then it shall be immediately followed by a preprocessing token. |
Required | |
| MisraC++2008:16-1-1 The defined preprocessor operator shall only be used in one of the two standard forms. |
Required | |
| MisraC++2008:16-1-2 All #else, #elif and #endif preprocessor directives shall reside in the same file as the #if or #ifdef directive to which they are related. |
Required | |
| MisraC++2008:16-2-4 The ', ", /* or // characters shall not occur in a header file name. |
Required | |
| MisraC++2008:16-2-5 The \ character should not occur in a header file name. |
Advisory | |
| MisraC++2008:16-2-6 The #include directive shall be followed by either a <filename> or "filename" sequence. |
Required | |
| MisraC++2008:16-3-1 There shall be at most one occurrence of the # or ## operators in a single macro definition. |
Required | |
| MisraC++2008:16-3-2 The # and ## operators should not be used. |
Advisory |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:16-6-1 All uses of the #pragma directive shall be documented. |
Document | |
| MisraC++2008:17-0-1 Reserved identifiers, macros and functions in the standard library shall not be defined, redefined or undefined. |
Required | |
| MisraC++2008:17-0-2 The names of standard library macros and objects shall not be reused. |
Required | |
| MisraC++2008:17-0-3 The names of standard library functions shall not be overridden. |
Required | |
| MisraC++2008:17-0-5 The setjmp macro and the longjmp function shall not be used. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:18-0-1 The C library shall not be used. |
Required |
| closely mapped |
|
| hierarchy ancestor |
|
|
| MisraC++2008:18-0-2 The library functions atof, atoi and atol from library <cstdlib> shall not be used. |
Required | |
| MisraC++2008:18-0-3 The library functions abort, exit, getenv and system from library <cstdlib> shall not be used. |
Required | |
| MisraC++2008:18-0-4 The time handling functions of library <ctime> shall not be used. |
Required | |
| MisraC++2008:18-0-5 The unbounded functions of library <cstring> shall not be used. |
Required | |
| MisraC++2008:18-2-1 The macro offsetof shall not be used. |
Required | |
| MisraC++2008:18-4-1 Dynamic heap memory allocation shall not be used. |
Required | |
| MisraC++2008:18-7-1 The signal handling facilities of <csignal> shall not be used. |
Required | |
| MisraC++2008:19-3-1 The error indicator errno shall not be used. |
Required | |
| MisraC++2008:27-0-1 The stream input/output library <cstdio> shall not be used. |
Required | |