Main Content

MISRA C:2023 Rule 23.2

A generic selection that is not expanded from a macro shall not contain potential side effects in the controlling expression

Since R2024a

Description

Rule Definition

A generic selection that is not expanded from a macro shall not contain potential side effects in the controlling expression.

Rationale

The compiler does not evaluate the controlling expression of a generic selection. If the controlling expression syntactically contains any side effects, these side effects are not applied in your code. This behavior can result in unexpected result.

Avoid side effects in the controlling expression of a generic selection.

Polyspace Implementation

The rule checker reports a violation if both of these conditions are true:

  • The generic selection is not expanded from a macro.

  • The controlling expression of a generic selection contains a side effects.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

In this example, the generic expression does not expand from a macro and its controlling expression increments the variable x. The rule checker reports a violation.

void foo() {
	int x;
	char y;
	y = _Generic(++x      /*Noncompliant*/
	            , int: 'i'
                , default: 'd');
}

Check Information

Group: Generic Selections
Category: Required
AGC Category: Required

Version History

Introduced in R2024a