Main Content

MISRA C++:2023 Rule 19.3.3

The argument to a mixed-use macro parameter shall not be subject to further expansion

Since R2024b

Description

Rule Definition

The argument to a mixed-use macro parameter shall not be subject to further expansion.

Rationale

The parameter to # or ## is not expanded prior to being used. The same parameter appearing elsewhere in the replacement text is expanded. If the macro parameter is itself subject to macro replacement, its use in mixed contexts within a macro replacement might not meet developer expectations.

Troubleshooting

If you expect a rule violation but Polyspace® does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

#define AA 42
#define BB(x) (x) = No. ## x

void main(void)
{
	int32_t example1 = 0;
	
	example1 = BB(AA);		//Noncompliant
}

Because x is replaced with AA, and AA is not a parameter to # or ## and is subject to further macro replacement, Polyspace flags the line where the first expansion happens as noncompliant.

Check Information

Group: Preprocessing Directives
Category: Required

Version History

Introduced in R2024b