코딩규칙 MISRA가 버전 2004에서 2012로 변경되면서
기존 규칙과 2012와의 관계에 대한 매핑 관계를 보여주는 표이다.
구버전의 MISRA C 규칙을 적용하고 있는 경우 2012 전환을 위해서 참고하시길 바랍니다.
Rule 1.1 (required) | Rule 1.1 (required) | The requirement that code conform to a version of the standard has moved into an introductory section. MISRA C:2004 Rule 1.1 had an implied ban on extensions. MISRA C:2012 Rule 1.1 permits extensions, but they are restricted by the new advisory Rule 1.2. |
Rule 1.2 (advisory) | ||
Rule 1.2 (required) | Rule 1.3 (required) | Relaxed to permit unspecified behaviour that is not considered critical. MISRA C:2012 Appendix H lists the issues that are covered. |
Rule 1.3 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 1.4 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 1.5 (advisory) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 2.1 (required) | Dir 4.2 (advisory) | Tightened to require documentation of assembly usage. |
Dir 4.3 (required) | ||
Rule 2.2 (required) | Rule 1.2 (advisory) | Relaxed to permit // comments in C99 code. Downgraded to advisory for C90. |
Rule 2.3 (required) | Rule 3.1 (required) | |
Rule 2.4 (advisory) | Dir 4.4 (advisory) | Changed to a directive as MISRA C:2012 does not precisely describe what constitutes code in a comment. |
Rule 3.1 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 3.2 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 3.3 (advisory) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. It is not an issue for C99 because the standard specifies the behaviour. |
Rule 3.4 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 3.5 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 3.6 (required) | Deleted | This issue is now covered by the Introduction to the Rules section. |
Rule 4.1 (required) | Rule 4.1 (required) | Relaxed to permit octal and hexadecimal escapes providing that they are properly terminated. C90 Undefined 11 (an undefined escape sequence is used) is now covered by Rule 1.3. |
Rule 4.2 (required) | Rule 4.2 (advisory) | Downgraded to advisory because there is no undefined or unspecified behaviour associated with trigraphs. There are certain source character sets in which it would be impossible to write C programs without trigraphs. |
Rule 5.1 (required) | Rule 5.1 (required) | Relaxed to permit the identifiers to be distinct up to the limit allowed by the implementation. |
Rule 5.2 (required) | ||
Rule 5.3 (required) | ||
Rule 5.4 (required) | ||
Rule 5.5 (required) | ||
Rule 5.2 (required) | Rule 5.3 (required) |
Rule 5.3 (required) | Rule 5.6 (required) | Relaxed to permit tag names that are the same as typedef names. |
Rule 5.4 (required) | Rule 5.7 (required) | Relaxed to permit tag names that are the same as typedef names. |
Rule 5.5 (advisory) | Rule 5.8 (required) | Relaxed to permit static identifiers declared in a block to have the same name as other identifiers. |
Rule 5.9 (advisory) | ||
Rule 5.6 (advisory) | Deleted | Relaxed to permit identifiers such as labels and enumeration constants that are not in the same scope to have the same identifier. |
Rule 5.7 (advisory) | Deleted | Relaxed to permit identifiers such as structure members names in different structures. |
Rule 6.1 (required) | Rule 10.1 (required) | Relaxed to allow addition of plain char and a different integer type, and subtraction of two plain char. |
Rule 10.2 (required) | ||
Rule 10.3 (required) | ||
Rule 10.4 (required) | ||
Rule 6.2 (required) | Rule 10.1 (required) | |
Rule 10.3 (required) | ||
Rule 10.4 (required) | ||
Rule 6.3 (advisory) | Dir 4.6 (advisory) | |
Rule 6.4 (required) | Rule 6.1 (required) | Relaxed to permit other legal C99 bit-field types |
Rule 6.5 (required) | Rule 6.2 (required) | Relaxed to permit unnamed bit-fields with a signed type to be single-bit. |
Rule 7.1 (required) | Rule 4.1 (required) | Relaxed to permit octal escape sequences providing they are properly terminated. |
Rule 7.1 (required) | ||
Rule 8.1 (required) | Rule 8.2 (required) | Tightened to require all function types to be in prototype form with named parameters. Relaxed to permit function definitions with no separate declaration if they have internal linkage. |
Rule 8.4 (required) | ||
Rule 17.3 (mandatory) | ||
Rule 8.2 (required) | Rule 8.1 (required) | Tightened to require all types to be explicitly stated, e.g. structure members. |
Rule 8.3 (required) | Rule 8.3 (required) | |
Rule 8.4 (required) | Rule 8.3 (required) | Tightened to require identical object types |
Rule 8.5 (required) | Deleted | This rule has been deleted because some programming paradigms require the presence of executable code in a header file. It is also desirable for inline functions to appear in header files so as to avoid undefined issues. The problems associated with multiple declaration/definition of objects/functions are dealt with by other rules. |
Rule 8.6 (required) | Deleted | Relaxed to permit declarations using the extern keyword at block scope, but more specific problems are caught by other rules such as: • Rule 1.3: Undefined behaviour due to use of the static keyword • Rule 8.3: Compatibility of multiply-declared/defined objects/functions |
Rule 8.7 (required) | Rule 8.9 (advisory) | Downgraded to advisory because there are instances where following this rule makes it impossible to perform adequate unit testing. |
Rule 8.8 (required) | Rule 8.5 (required) | |
Rule 8.9 (required) | Rule 8.6 (required) | |
Rule 8.10 (required) | Rule 8.7 (advisory) | Downgraded to advisory because there are instances where following this rule makes it impossible to perform adequate unit testing. |
Rule 8.11 (required) | Rule 8.8 (required) | |
Rule 8.12 (required) | Rule 8.11 (advisory) | Tightened to require inclusion of the size for arrays with external linkage, even if defined implicitly by initialization. |
Rule 9.1 (required) | Rule 9.1 (mandatory) | |
Rule 9.2 (required) | Rule 9.2 (required) | Relaxed to permit use of {0} in subarrays or sub- structures. Relaxed to permit initialization with a string literal. |
Rule 9.3 (required) | ||
Rule 9.3 (required) | Rule 8.12 (required) | Relaxed to permit partial initialization providing all members are unique |
Rule 10.1 (required) | Rule 10.3 (required) | Tightened to include plain char, Boolean and enumerated types. Relaxed to permit implicit widening conversions on function arguments or return values. Relaxed to permit signed integer constants to be used in unsigned contexts, providing the value is within the unsigned range. |
Rule 10.4 (required) | ||
Rule 10.6 (required) | ||
Rule 10.7 (required) | ||
Rule 10.2 (required) | Rule 10.3 (required) | Relaxed to permit implicit widening conversions on function arguments or return values. |
Rule 10.4 (required) | ||
Rule 10.6 (required) | ||
Rule 10.7 (required) | ||
Rule 10.3 (required) | Rule 10.8 (required) | Tightened to include plain char, Boolean and enumerated types. |
Rule 10.4 (required) | Rule 10.8 (required) | |
Rule 10.5 (required) | Deleted | This rule has been deleted as it did not adequately address the underlying problem. The enhanced type rules address some of the issues previously covered by this rule. |
Rule 10.6 (required) | Rule 7.2 (required) | |
Rule 11.1 (required) | Rule 11.1 (required) | Tightened to include conversions to/from integral types. Relaxed to permit conversions from a null pointer constant, and conversion to void. |
Rule 11.2 (required) | Rule 11.1 (required) | Tightened to include conversions from void *, and to/from Boolean, plain char and enumeration types. |
Rule 11.2 (required) | ||
Rule 11.5 (advisory) | ||
Rule 11.7 (required) |
Rule 11.3 (advisory) | Rule 11.1 (required) | |
Rule 11.2 (required) | ||
Rule 11.4 (advisory) | ||
Rule 11.6 (required) | ||
Rule 11.4 (advisory) | Rule 11.3 (required) | Upgraded to required. Relaxed to permit casts that convert into pointer to character types. |
Rule 11.5 (required) | Rule 11.8 (required) | |
Rule 12.1 (advisory) | Rule 12.1 (advisory) | Tightened MISRA C:2004 Rule 12.1 by describing the rule’s advice in terms of the language syntax. |
Rule 12.2 (required) | Rule 13.2 (required) | |
Rule 12.3 (required) | Rule 13.6 (mandatory) | Relaxed to permit sizeof to be applied to an expression whose only side effect is to read from a volatile object. |
Rule 12.4 (required) | Rule 13.5 (required) | |
Rule 12.5 (required) | Rule 12.1 (advisory) | Relaxed to permit postfix, unary and cast operands of && and || without brackets. |
Rule 12.6 (advisory) | Rule 10.1 (required) | |
Rule 12.7 (required) | Rule 10.1 (required) | |
Rule 12.8 (required) | Rule 12.2 (required) | |
Rule 12.9 (required) | Rule 10.1 (required) | |
Rule 12.10 (required) | Rule 12.3 (advisory) | Downgraded to advisory, as there are occasions where there are no easy ways in which to achieve the same effect. |
Rule 12.11 (advisory) | Rule 12.4 (advisory) | |
Rule 12.12 (required) | Dir 1.1 (required) | Changed to a directive as it is not a statically checkable rule. |
Rule 12.13 (advisory) | Rule 13.3 (advisory) | Relaxed to permit ++ and -- to be mixed with other operators, provided that the ++ or -- is the only source of side-effects. |
Rule 13.1 (required) | Rule 13.4 (advisory) | Tightened so that the result of an assignment operator can not be used anywhere. For example, a[x=y]=x; Downgraded to advisory as the more important issues are addressed by other MISRA C:2012 required rules. For example: • Rule 13.2 covers evaluation order of side effects. |
Rule 13.2 (advisory) | Rule 14.4 (required) | |
Rule 13.3 (required) | Dir 1.1 (required) | Focussing on one aspect of floating-point arithmetic (as in MISRA C:2004 Rule 13.3) attached too much importance to that aspect and might give users a false sense of confidence. |
Rule 13.4 (required) | Rule 14.1 (required) | Relaxed to permit objects with floating-point type in the controlling expression, providing they are not a loop counter. |
Rule 13.5 (required) | Rule 14.2 (required) | |
Rule 13.6 (required) | Rule 14.2 (required) | |
Rule 13.7 (required) | Rule 14.3 (required) | Relaxed to permit invariant Boolean expressions in other contexts, such as assignments. This was the original intention for MISRA C:2004 Rule 13.7. |
Rule 14.1 (required) | Rule 2.1 (required) |
Rule 16.9 (required) | Deleted | Relaxed to permit the use of function name on its own. The issues raised by MISRA C:2004 Rule 16.9 are now covered by the set of type checking rules: MISRA C:2012 Rules 10.1–10.4. |
Rule 16.10 (required) | Dir 4.7 (required) | Changed to directive as MISRA C:2012 does not specify which functions return error information or how the check should occur. |
Rule 17.1 (required) | Rule 18.1 (required) | |
Rule 17.2 (required) | Rule 18.2 (required) | |
Rule 17.3 (required) | Rule 18.3 (required) | |
Rule 17.4 (required) | Rule 18.4 (advisory) | Relaxed to permit ++ and -- on pointers. Downgraded to advisory. |
Rule 17.5 (advisory) | Rule 18.5 (advisory) | |
Rule 17.6 (required) | Rule 18.6 (required) | |
Rule 18.1 (required) | Rule 1.3 (required) | Relaxed to permit incomplete types, providing undefined behaviour does not occur. |
Rule 18.2 (required) | Rule 19.1 (mandatory) | |
Rule 18.3 (required) | Deleted | This rule has been deleted because its interpretation is subjective and it is not statically checkable. |
Rule 18.4 (required) | Rule 19.2 (advisory) | Downgraded to advisory. |
Rule 19.1 (advisory) | Rule 20.1 (advisory) | |
Rule 19.2 (advisory) | Rule 20.2 (required) | Tightened to include use of \. Upgraded to required. |
Rule 19.3 (required) | Rule 20.3 (required) | |
Rule 19.4 (required) | Rule 20.4 (required) | Relaxed so that the only thing not permitted is to define a macro with the same name as a keyword. Other MISRA C:2012 rules covers the issues that MISRA C:2004 Rule 19.4 was addressing. For example: • Rule 12.1 requires use of parenthesis to make the precedence of an expression clear. • Rule 14.6 requires that a macro with more than 1 statement does not get expanded in an iteration or selection statements. • Rules 10.1–10.4 prevent #define INTPTR int * INTPTR a, b; The user could not use b as if it were a pointer without violating a MISRA type check rule. |
Rule 19.5 (required) | Deleted | This rule dealt with a stylistic issue. |
Rule 19.6 (required) | Rule 20.5 (advisory) | Downgraded to advisory. |
Rule 19.7 (advisory) | Dir 4.9 (advisory) | |
Rule 19.8 (required) | Rule 1.3 (required) | In C90 the behaviour is undefined and is caught by rule MISRA C:2012 Rule 1.3. |
Rule 19.9 (required) | Rule 20.6 (required) |
Rule 19.10 (required) | Rule 20.7 (required) | Relaxed so that parenthesis are only required around parameters that are used in an expression context. The strict application MISRA C:2004 Rule 19.10 could produce syntax errors. For example, in: #define GET_MEMBER(S,M) (S).M it is a constraint error to enclose M in parentheses. |
Rule 19.11 (required) | Rule 20.9 (required) | |
Rule 19.12 (required) | Rule 20.11 (required) | Relaxed to cover the undefined behaviour without being unnecessarily restrictive. |
Rule 19.13 (advisory) | Rule 20.10 (advisory) | |
Rule 19.14 (required) | Rule 1.3 (required) | The undefined behaviour is covered by MISRA C:2012 Rule 1.3. |
Rule 19.15 (required) | Dir 4.10 (required) | Changed to a directive as MISRA C:2012 does not specify the form that the precautions should take. |
Rule 19.16 (required) | Rule 20.13 (required) | |
Rule 19.17 (required) | Rule 20.14 (required) | |
Rule 20.1 (required) | Rule 21.1 (required) | Relaxed to permit #define on Future Identifiers . |
Rule 20.2 (required) | Rule 21.2 (required) | |
Rule 20.3 (required) | Dir 4.11 (required) | |
Rule 20.4 (required) | Rule 21.3 (required) | |
Dir 4.12 (required) | ||
Rule 20.5 (required) | Dir 1.1 (required) | Relaxed to permit the use of errno, providing evidence of its use in the program is documented. |
Rule 20.6 (required) | Rule 1.3 (required) | Relaxed to permit the use of offsetof except where undefined behaviour might occur. |
Rule 20.7 (required) | Rule 21.4 (required) | |
Rule 20.8 (required) | Rule 21.5 (required) | |
Rule 20.9 (required) | Rule 21.6 (required) | Tightened to include the I/O routines in <wchar.h>. |
Rule 20.10 (required) | Rule 21.7 (required) | Tightened to include atoll. |
Rule 20.11 (required) | Rule 21.8 (required) | |
Rule 20.12 (required) | Rule 21.10 (required) | Tightened to include wcsftime in <wchar.h>. |
Rule 21.1 (required) | Dir 4.1 (required) | Changed to a directive as it is not a statically checkable rule. |
728x90
'소프트웨어 개발(SW Dev) > Rule(MISRA-C)' 카테고리의 다른 글
MISRA C:2012 - Mandatory 목록 (0) | 2024.11.26 |
---|---|
MISRA C 2012 규칙 구성 (0) | 2024.11.25 |
MISRA C:2023 표준 (0) | 2024.11.19 |
MISRA Compliance:2020 overview (0) | 2024.02.06 |
MISRA-C 2012 카테고리별 필수(Mandatory) Rule 목록 (0) | 2024.02.05 |
댓글