MISRA Discussion Forums

Full Version: what means about "Before preprocessing" in Rule[14.3]
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
"Before preprocessing, a null statement shall only occur on a
line by itself; it may be followed by a comment provided that
the first character following the null statement is a white-space
character." in this rule,why "Before preprocessing"is used as a condition?
Thanks!
Consider the following code fragment:
Code:
void fn ( bool_t b )
{
   if ( b );   /* Non-compliant */
   {
      DO_SOMETHING;
   }
}
In the above DO_SOMETHING appears to be a (non-null) statement. However this depends on the value of the macro after pre-processing.

If the macro is defined as
Code:
#define DO_SOMETHING
then the DO_SOMETHING line is actually a null statement which appears on a line by itself. In order to catch this, the source code before pre-processing must be considered. Pre-processing will simply remove the DO_SOMETHING token sequence.

Rule 14.3 is also designed to catch the accidental use of null statements by the unintentional insertion of a ';'. The non-compliant line is the example above shows how they can lead to unexpected results, as what appears to be the body of the if statement will always be executed.
However, according to http://www.misra-c2.com/forum/viewtopic.php?t=264, the line with the DO_SOMETHING macro usage is still non-compliant if the macro has the given definition, yes?
Yes, it is non-compliant.