セミコロンで終了するマクロ
マクロ定義がセミコロンで終了している
説明
この欠陥は、1 回以上呼び出されたマクロにセミコロンで終了する定義が含まれている場合に発生します。
リスク
マクロ定義がセミコロンで終了している場合は、マクロ展開が式の内部などの特定のコンテキストでの意図しないプログラム ロジックにつながる可能性があります。
たとえば、次のマクロを考えてみましょう。
#define INC_BY_ONE(x) ++x;
res = INC_BY_ONE(x)%2;
res = ++x; %2;
x+1 の値が res に代入されますが、これは意図されていない可能性があります。残りのスタンドアロン ステートメント %2; は有効な C コードであり、厳密なコンパイラ警告を有効にしない限り検出されません。修正方法
マクロ定義をセミコロンで終了しないようにします。マクロの後ろにセミコロンを付けるかどうかはユーザーに任せてください。
または、セミコロンで終わるステートメントを含む関数形式マクロより、インライン関数を使用します。
例
結果情報
| グループ: 適切な手法 |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: SEMICOLON_TERMINATED_MACRO |
| 影響度: Low |
バージョン履歴
R2020a で導入