JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.

If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.

If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.

CodeSonar® 9.2p0 CONFIDENTIAL CodeSecure Inc
C and C++


LANG.STRUCT.BNC : 本体が複合文ではない制御文

要旨

whiledo-whileforifelseswitch 文の本体が波括弧 {...} で囲まれていません。

プロパティ

クラス名 Body Is Not Compound Statement
日本語クラス名 本体が複合文ではない制御文
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.BNC
カテゴリー
MisraC2025 MisraC2025:15.6 The body of an iteration-statement or a selection-statement shall be a compound-statement
MisraC2023 MisraC2023:15.6 The body of an iteration-statement or a selection-statement shall be a compound-statement
Misra2012 Misra2012:15.6 The body of an iteration-statement or a selection-statement shall be a compound-statement
Misra2004 Misra2004:14.3 Before preprocessing, a null statement shall only occur on a line by itself; it may be followed by a comment provided that the first character following the null statement is a white-space character
  Misra2004:14.8 The statement forming the body of a switch, while, do ... while or for statement shall be a compound statement
  Misra2004:14.9 An if (expression) construct shall be followed by a compound statement. The else keyword shall be followed by either a compound statement, or another if statement
AUTOSARC++14 AUTOSARC++14:M6-3-1 The statement forming the body of a switch, while, do ... while or for statement shall be a compound statement.
  AUTOSARC++14:M6-4-1 An if ( condition ) construct shall be followed by a compound statement. The else keyword shall be followed by either a compound statement, or another if statement.
MisraC++2008 MisraC++2008:6-3-1 The statement forming the body of a switch, while, do ... while or for statement shall be a compound statement.
  MisraC++2008:6-4-1 An if ( condition ) construct shall be followed by a compound statement. The else keyword shall be followed by either a compound statement, or another if statement.
MisraC++2023 MisraC++2023:9.3.1 The body of an iteration-statement or a selection-statement shall be a compound-statement
JSF++ JSF++:59 The statements forming the body of an if, else if, else, while, do...while or for statement shall always be enclosed in braces, even if the braces form an empty block.
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Body Is Not Compound Statement"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

関数 f()g() は同じ内容で(インデントのみが異なります)、両方に対してこのワーニングが検出されます。 インデントによって、g() 中の b(i)if 文に含まれていると誤解し易くなっています。 本体を明示的な括弧で囲むことにより、動作が明確になります。

void a(int p);
void b(int p);
void c(int p);

void f(int i){ 
    if (i > 5) /* 'Body Is Not Compound Statement' warning issued here */
        a(i);
    b(i);
    c(i);
}  

void g(int i){ 
    if (i > 5) /* 'Body Is Not Compound Statement' warning issued here */
        a(i);
        b(i);
    c(i);
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。

 

To report problems with this documentation, please visit https://support.codesecure.com/.