メインコンテンツ

MISRA C:2012 Rule 23.2

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

R2024a 以降

説明

ルール定義

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

This rule comes from MISRA C™:2012 Amendment 3.

根拠

コンパイラは総称選択の制御式を評価しません。制御式で構文的に二次的影響が含まれる場合、これらの二次的影響はコードには適用されません。この動作は予期しない結果につながる可能性があります。

総称選択の制御式の二次的影響を避けてください。

Polyspace 実装

ルール チェッカーは、以下の条件の両方が満たされた場合に違反を報告します。

  • 総称選択がマクロから展開されない。

  • 総称選択の制御式に二次的影響が含まれている。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

この例では、総称選択がマクロから展開されず、その制御式が変数 x をインクリメントします。ルール チェッカーは違反を報告します。

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

チェック情報

グループ: 総称選択
カテゴリ: 必要
AGC カテゴリ: 必要

バージョン履歴

R2024a で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace® Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.