メインコンテンツ

CERT C: Rec.EXP15-C

if、for、または while ステートメントと同じ行にセミコロンを配置しない

説明

ルール定義

if、for、または while ステートメントと同じ行にセミコロンを配置しないようにします。1

Polyspace 実装

ルール チェッカーは、"if、for、または while ステートメントと同じ行にあるセミコロン" をチェックします。

すべて展開する

問題

[if、for、または while ステートメントと同じ行にあるセミコロン] は、iffor、または while ステートメントの最後のトークンと同じ行にセミコロンがあると本体が空になるために発生します。

チェッカーは、if ステートメントの直後に else ステートメントが続くケースを例外として許可します。

if(condition);
else {
  //...
}

リスク

iffor、または while ステートメントに続くセミコロンは、多くの場合、プログラミング エラーを示しています。誤ったセミコロンは、実行フローを変更し、意図しない結果につながります。

修正方法

iffor、または while ステートメントの本体を空にする場合は、次のように、ブロックでセミコロンをラップし、そのブロックを新しい行に配置して意図を明確に示します。


if(condition)
   {;}
または、誤ったセミコロンを削除します。

例 - 誤ったセミコロン
int credentialsOK(void);

void login () {
    int loggedIn = 0;
    if(credentialsOK()); //Noncompliant
      loggedIn = 1;
}

この例では、誤ったセミコロンによって if の本体が空になります。代入 loggedIn=1 は必ず実行されます。ただし、代入はある条件下でしか実行されない可能性があります。

修正 – 誤ったセミコロンを削除する

セミコロンが意図されたものでなければ、そのセミコロンを削除します。

int credentialsOK(void);

void login () {
    int loggedIn = 0;
    if(credentialsOK())
      loggedIn = 1;
}

チェック情報

グループ: Rec.03.式 (EXP)

バージョン履歴

R2020a で導入


1 This software has been created by MathWorks incorporating portions of: the “SEI CERT-C Website,” © 2017 Carnegie Mellon University, the SEI CERT-C++ Web site © 2017 Carnegie Mellon University, ”SEI CERT C Coding Standard – Rules for Developing safe, Reliable and Secure systems – 2016 Edition,” © 2016 Carnegie Mellon University, and “SEI CERT C++ Coding Standard – Rules for Developing safe, Reliable and Secure systems in C++ – 2016 Edition” © 2016 Carnegie Mellon University, with special permission from its Software Engineering Institute.

ANY MATERIAL OF CARNEGIE MELLON UNIVERSITY AND/OR ITS SOFTWARE ENGINEERING INSTITUTE CONTAINED HEREIN IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.

This software and associated documentation has not been reviewed nor is it endorsed by Carnegie Mellon University or its Software Engineering Institute.