Posts: 87
Threads: 68
Joined: Nov 2004
Reputation:
0
Expanding upon the example in the MISRA 2004 Standard for 14.3:
#define WHATABOUTTHIS /* Um */ ;
#define ORTHIS
#define ANDTHISTOO /* Well, I, uh... */
void f()
{
; /* OK */
/* Not OK */ ;
;/* Not OK */
WHATABOUTTHIS
ORTHIS;
ANDTHISTOO;
}
Which of the lines with macros, if any, violate the Rule?
Gavin McCall
Unregistered
This macro breaks rule 19.4. Macro expanding to Null statement is not allowed.
Code:
#define M2
#define M3 /* comment */
This macro expands to no body, and is therefore not prohibited by 19.4.
A comment in a macro definition is removed by the pre-processor. Rule 14.3 applied before
Pre-processing. Treatment of M2 and M3 is identical.
Since definition of M1 macro was invalid, its use is already a violation.
After pre-processing, these are both Null statements. Before pre-processing, there are characters before the Null statement. This is not allowed by 14.3.
Posts: 632
Threads: 18
Joined: Jan 2006
Reputation:
1
Quote:
This macro breaks rule 19.4. Macro expanding to Null statement is not allowed.
Code:
#define M2
#define M3 /* comment */
This macro expands to no body, and is therefore not prohibited by 19.4.
A comment in a macro definition is removed by the pre-processor. Rule 14.3 applied before
Pre-processing. Treatment of M2 and M3 is identical.
Since definition of M1 macro was invalid, its use is already a violation.
After pre-processing, these are both Null statements. Before pre-processing, there are characters before the Null statement. This is not allowed by 14.3.
Re-posted under offical user name only.
Posted by and on behalf of the MISRA C Working Group