![]() |
Index of MISRA C:2012 Rules | |
| Dir-1.1 Required | Any implementation-defined behaviour on which the output of the program depends shall be documented and understood |
| Dir-2.1 Required | All source files shall compile without any compilation errors |
| Dir-3.1 Required | All code shall be traceable to documented requirements |
| Dir-4.1 Required | Run-time failures shall be minimized |
| Dir-4.2 Advisory | All usage of assembly language should be documented |
| Dir-4.3 Required | Assembly language shall be encapsulated and isolated |
| Dir-4.4 Advisory | Sections of code should not be "commented out" |
| Dir-4.5 Advisory | Identifiers in the same name space with overlapping visibility should be typographically unambiguous |
| Dir-4.6 Advisory | typedefs that indicate size and signedness should be used in place of the basic numerical types |
| Dir-4.7 Required | If a function returns error information, then that error information shall be tested |
| Dir-4.8 Advisory | If a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hidden |
| Dir-4.9 Advisory | A function should be used in preference to a function-like macro where they are interchangeable |
| Dir-4.10 Required | Precautions shall be taken in order to prevent the contents of a header file being included more then once |
| Dir-4.11 Required | The validity of values passed to library functions shall be checked |
| Dir-4.12 Required | Dynamic memory allocation shall not be used |
| Dir-4.13 Advisory | Functions which are designed to provide operations on a resource should be called in an appropriate sequence |
| Rule-1.1 Required | The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limits |
| Rule-1.2 Advisory | Language extensions should not be used |
| Rule-1.3 Required | There shall be no occurrence of undefined or critical unspecified behaviour |
| Rule-2.1 Required | A project shall not contain unreachable code |
| Rule-2.2 Required | There shall be no dead code |
| Rule-2.3 Advisory | A project should not contain unused type declarations |
| Rule-2.4 Advisory | A project should not contain unused tag declarations |
| Rule-2.5 Advisory | A project should not contain unused macro declarations |
| Rule-2.6 Advisory | A function should not contain unused label declarations |
| Rule-2.7 Advisory | There should be no unused parameters in functions |
| Rule-3.1 Required | The character sequences /* and // shall not be used within a comment. |
| Rule-3.2 Required | Line-splicing shall not be used in // comments. |
| Rule-4.1 Required | Octal and hexadecimal escape sequences shall be terminated |
| Rule-4.2 Advisory | Trigraphs should not be used |
| Rule-5.1 Required | External identifiers shall be distinct |
| Rule-5.2 Required | Identifiers declared in the same scope and name space shall be distinct |
| Rule-5.3 Required | An identifier declared in an inner scope shall not hide an identifier declared in an outer scope |
| Rule-5.4 Required | Macro identifiers shall be distinct |
| Rule-5.5 Required | Identifiers shall be distinct from macro names |
| Rule-5.6 Required | A typedef name shall be a unique identifier |
| Rule-5.7 Required | A tag name shall be a unique identifier |
| Rule-5.8 Required | Identifiers that define objects or functions with external linkage shall be unique |
| Rule-5.9 Advisory | Identifiers that define objects or functions with internal linkage should be unique |
| Rule-6.1 Required | Bit-fields shall only be declared with an appropriate type |
| Rule-6.2 Required | Single-bit named bit fields shall not be of a signed type |
| Rule-7.1 Required | Octal constants shall not be used |
| Rule-7.2 Required | A "u" or "U" suffix shall be applied to all integer constants that are represented in an unsigned type |
| Rule-7.3 Required | The lowercase character "l" shall not be used in a literal suffix |
| Rule-7.4 Required | A string literal shall not be assigned to an object unless the object's type is "pointer to const-qualified char" |
| Rule-8.1 Required | Types shall be explicitly specified |
| Rule-8.2 Required | Function types shall be in prototype form with named parameters |
| Rule-8.3 Required | All declarations of an object or function shall use the same names and type qualifiers |
| Rule-8.4 Required | A compatible declaration shall be visible when an object or function with external linkage is defined |
| Rule-8.5 Required | An external object or function shall be declared once in one and only one file |
| Rule-8.6 Required | An identifier with external linkage shall have exactly one external definition |
| Rule-8.7 Advisory | Functions and objects should not be defined with external linkage if they are referenced in only one translation unit |
| Rule-8.8 Required | The static storage class specifier shall be used in all declarations of objects and functions that have internal linkage |
| Rule-8.9 Advisory | An object should be defined at block scope if its identifier only appears in a single function |
| Rule-8.10 Required | An inline function shall be declared with the static storage class |
| Rule-8.11 Advisory | When an array with external linkage is declared, its size should be explicitly specified |
| Rule-8.12 Required | Within an enumerator list, the value of an implicitly-specified enumeration constant shall be unique |
| Rule-8.13 Advisory | A pointer should point to a const-qualified type whenever possible |
| Rule-8.14 Required | The restrict type qualifier shall not be used |
| Rule-9.1 Mandatory | The value of an object with automatic storage duration shall not be read before it has been set |
| Rule-9.2 Required | The initializer for an aggregate or union shall be enclosed in braces |
| Rule-9.3 Required | Arrays shall not be partially initialized |
| Rule-9.4 Required | An element of an object shall not be initialized more than once |
| Rule-9.5 Required | Where designated initializers are used to initialize an array object the size of the array shall be specified explicitly |
| Rule-10.1 Required | Operands shall not be of an inappropriate essential type. |
| Rule-10.2 Required | Expressions of essentially character type shall not be used inappropriately in addition and subtraction operations |
| Rule-10.3 Required | The value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category. |
| Rule-10.4 Required | Both operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type category |
| Rule-10.5 Advisory | The value of an expression should not be cast to an inappropriate essential type |
| Rule-10.6 Required | The value of a composite expression shall not be assigned to an object with wider essential type |
| Rule-10.7 Required | If a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand shall not have wider essential type |
| Rule-10.8 Required | The value of a composite expression shall not be cast to a different essential type category or a wider essential type |
| Rule-11.1 Required | Conversions shall not be performed between a pointer to a function and any other type |
| Rule-11.2 Required | Conversions shall not be performed between a pointer to an incomplete type and any other type |
| Rule-11.3 Required | A cast shall not be performed between a pointer to object type and a pointer to a different object type |
| Rule-11.4 Advisory | A conversion should not be performed between a pointer to object and an integer type |
| Rule-11.5 Advisory | A conversion should not be performed from pointer to void into pointer to object |
| Rule-11.6 Required | A cast shall not be performed between pointer to void and an arithmetic type |
| Rule-11.7 Required | A cast shall not be performed between pointer to object and a non-integer arithmetic type |
| Rule-11.8 Required | A cast shall not remove any const or volatile qualification from the type pointed to by a pointer |
| Rule-11.9 Required | The macro NULL shall be the only permitted form of integer null pointer constant |
| Rule-12.1 Advisory | The precedence of operators within expressions should be made explicit |
| Rule-12.2 Required | The right hand operand of a shift operator shall lie in the range zero to one less than the width in bits of the essential type of the left hand operand |
| Rule-12.3 Advisory | The comma operator should not be used |
| Rule-12.4 Advisory | Evaluation of constant expressions should not lead to unsigned integer wrap-around |
| Rule-13.1 Required | Initializer lists shall not contain persistent side-effects |
| Rule-13.2 Required | The value of an expression and its persistent side-effects shall be the same under all permitted evaluation orders |
| Rule-13.3 Advisory | A full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator |
| Rule-13.4 Advisory | The result of an assignment operator should not be used |
| Rule-13.5 Required | The right hand operand of a logical && or || operator shall not contain persistent side effects |
| Rule-13.6 Mandatory | The operand of the sizeof operator shall not contain any expression which has potential side-effects |
| Rule-14.1 Required | A loop counter shall not have essentially floating type |
| Rule-14.2 Required | A for loop shall be well-formed |
| Rule-14.3 Required | Controlling expressions shall not be invariant |
| Rule-14.4 Required | The controlling expression of an if-statement and the controlling expression of an iteration-statement shall have essentially Boolean type |
| Rule-15.1 Advisory | The goto statement should not be used |
| Rule-15.2 Required | The goto statement shall jump to a label declared later in the same function |
| Rule-15.3 Required | Any label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statement |
| Rule-15.4 Advisory | There should be no more than one break or goto statement used to terminate any iteration statement |
| Rule-15.5 Advisory | A function should have a single point of exit at the end |
| Rule-15.6 Required | The body of an iteration-statement or a selection-statement shall be a compound-statement |
| Rule-15.7 Required | All if ... else if constructs shall be terminated with an else statement |
| Rule-16.1 Required | All switch statements shall be well-formed |
| Rule-16.2 Required | A switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statement |
| Rule-16.3 Required | An unconditional break statement shall terminate every switch-clause |
| Rule-16.4 Required | Every switch statement shall have a default label |
| Rule-16.5 Required | A default label shall appear as either the first or the last switch label of a switch statement |
| Rule-16.6 Required | Every switch statement shall have at least two switch-clauses |
| Rule-16.7 Required | A switch-expression shall not have essentially Boolean type |
| Rule-17.1 Required | The features of <stdarg.h> shall not be used |
| Rule-17.2 Required | Functions shall not call themselves, either directly or indirectly |
| Rule-17.3 Mandatory | A function shall not be declared implicitly |
| Rule-17.4 Mandatory | All exit paths from a function with non-void return type shall have an explicit return statement with an expression |
| Rule-17.5 Advisory | The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements |
| Rule-17.6 Mandatory | The declaration of an array parameter shall not contain the static keyword between the [ ] |
| Rule-17.7 Required | The value returned by a function having non-void return type shall be used |
| Rule-17.8 Advisory | A function parameter should not be modified |
| Rule-18.1 Required | A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand |
| Rule-18.2 Required | Subtraction between pointers shall only be applied to pointers that address elements of the same array |
| Rule-18.3 Required | The relational operators >, >=, < and <= shall not be applied to objects of pointer type except where they point into the same object |
| Rule-18.4 Advisory | The +, -, += and -= operators should not be applied to an expression of pointer type |
| Rule-18.5 Advisory | Declarations should contain no more than two levels of pointer nesting |
| Rule-18.6 Required | The address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to exist |
| Rule-18.7 Required | Flexible array members shall not be declared |
| Rule-18.8 Required | Variable-length array types shall not be used |
| Rule-19.1 Mandatory | An object shall not be assigned or copied to an overlapping object |
| Rule-19.2 Advisory | The union keyword should not be used |
| Rule-20.1 Advisory | #include directives should only be preceded by preprocessor directives or comments |
| Rule-20.2 Required | The ', " or \ characters and the /* or // character sequences shall not occur in a header file name |
| Rule-20.3 Required | The #include directive shall be followed by either a <filename> or "filename" sequence |
| Rule-20.4 Required | A macro shall not be defined with the same name as a keyword |
| Rule-20.5 Advisory | #undef should not be used |
| Rule-20.6 Required | Tokens that look like a preprocessing directive shall not occur within a macro argument |
| Rule-20.7 Required | Expressions resulting from the expansion of macro parameters shall be enclosed in parentheses |
| Rule-20.8 Required | The controlling expression of a #if or #elif preprocessing directive shall evaluate to 0 or 1 |
| Rule-20.9 Required | All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluation |
| Rule-20.10 Advisory | The # and ## preprocessor operators should not be used |
| Rule-20.11 Required | A macro parameter immediately following a # operator shall not immediately be followed by a ## operator |
| Rule-20.12 Required | A macro parameter used as an operand to the # or ## operators, which is itself subject to further macro replacement, shall only be used as an operand to these operators |
| Rule-20.13 Required | A line whose first token is # shall be a valid preprocessing directive |
| Rule-20.14 Required | 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 |
| Rule-21.1 Required | #define and #undef shall not be used on a reserved identifier or reserved macro name |
| Rule-21.2 Required | A reserved identifier or macro name shall not be declared |
| Rule-21.3 Required | The memory allocation and deallocation functions of <stdlib.h> shall not be used |
| Rule-21.4 Required | The standard header file <setjmp.h> shall not be used |
| Rule-21.5 Required | The standard header file <signal.h> shall not be used |
| Rule-21.6 Required | The Standard Library input/output functions shall not be used |
| Rule-21.7 Required | The atof, atoi, atol and atoll functions of <stdlib.h> shall not be used |
| Rule-21.8 Required | The library functions abort, exit, getenv and system of <stdlib.h> shall not be used |
| Rule-21.9 Required | The library functions bsearch and qsort of <stdlib.h> shall not be used |
| Rule-21.10 Required | The Standard Library time and date functions shall not be used |
| Rule-21.11 Required | The standard header file <tgmath.h> shall not be used |
| Rule-21.12 Advisory | The exception handling features of <fenv.h> should not be used |
| Rule-22.1 Required | All resources obtained dynamically by means of Standard Library functions shall be explicitly released |
| Rule-22.2 Mandatory | A block of memory shall only be freed if it was allocated by means of a Standard Library function |
| Rule-22.3 Required | The same file shall not be open for read and write access at the same time on different streams |
| Rule-22.4 Mandatory | There shall be no attempt to write to a stream which has been opened as read-only |
| Rule-22.5 Mandatory | A pointer to a FILE object shall not be dereferenced |
| Rule-22.6 Mandatory | The value of a pointer to a FILE shall not be used after the associated stream has been closed |
|
||
(c) The Motor Industry Research Association, 2012
|
QA C Source Code Analyser 8.1.2
MISRA C:2012 Compliance Module 1.0 © 2013 Programming Research www.programmingresearch.com |
Personality Groups | Glossary | Message Index | Contents |