...
Programmers should never attempt to access anything underlying any of these macros.
Noncompliant Code Example (assert)
In this example, a programmer working with a known <assert.h> is attempting to subvert the standard assert
functionality so that assertions are always made, regardless of whether ndebug
is set.
...
This call results in undefined behavior, so the programmer can now never rely on assertions, even in debug builds.
Compliant Solution (assert)
In this solution, the programmer does not #undef a standard macro, and explicitly handles any release-build assertion checks.
Code Block | ||
---|---|---|
| ||
#include <assert.h> void myassert(int e) { assert(e); /* other verification ... */ } |
Risk Assessment
Accessing objects or function underlying these macros does not produce defined behavior, which may lead to incorrect or unexpected program behavior.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
MSC38-C | low | unlikely | medium | P2 | L3 |
References
Wiki Markup |
---|
\[[ISO/IEC 9899:1999|AA. References#ISO/IEC 9899-1999]\], all sections indicated by the [undefined behavior items |CC. Undefined Behavior] noted above. |
...