次のcコードの何が問題になっていますか?MISRA品質警告メッセージ

Photon001

次のコードサンプルスニペットに対してMISRAQAC警告が表示されます。つまり、「制御式の値は、明示的な論理演算から派生したものではありません。」

戻り値を変数評価に割り当てずに行われたことは明らかです。この品質警告の正確な理由は何ですか?

file.c

if(fun1())
{    
//statement1    
}    
else    
{    
//statement2
}


bool fun1()
{    
  return (bool) (Global_variable1 && Global_Variable2)    
}
ルンディン

コードに次のMISRA-C:2012違反があります。

  • 規則8.2関数は、名前付きパラメーターを使用したプロトタイプ形式でなければなりません。

  • 規則8.4互換性のある宣言は、外部リンケージを持つオブジェクトまたは関数が定義されている場合に表示されるものとします。

  • 規則17.3関数は暗黙的に宣言されてはならない

準拠ツールが上記のエラーの少なくとも1つを与えることを期待します。さらに、準拠したC99以降のコンパイラーは、暗黙的な関数/暗黙的なintを使用してコードをコンパイルしません。

これらの問題はいずれも、ブール値に関連するものではありません。特に、MISRA-Cには「制御式の値が明示的な論理演算から派生していない」というルールがありません。関連するMISRA-Cルールは

規則14.4ifステートメント/-/の制御式は、基本的にブール型でなければなりません

MISRA-C:2004では、このルールは13.2と呼ばれ、当時は単なる助言でした。それはほとんど同じルールでした。

MISRA-C:2012の違いは、ツールを使用していない場合に備えて、ツールに「本質的にブール」(2004年には「実質的にブール」と呼ばれる)として扱うタイプを構成する何らかの手段が必要であると明示的に言及していることです。 C99ブール型。

ツールがどのタイプを本質的にブール値と見なすかわからない場合は、自家製のC90をboolとして扱いますintそして、ifステートメントがを使用しintていると見なされますが、これはルール違反でした。

さらに、事前関数宣言が表示されていないC90関数は、関数がを返すことを暗黙的に想定していますintしかし、上記の3つのルールがあるため、MISRA-Cチェッカーはそのようなコードを決して通過させてはなりません。

特定のエラーを修正するための解決策:

  • どのタイプが「本質的にブール」と見なされるかがわかるように、ツールの構成方法をツールベンダーに問い合わせてください。
  • または、コードにパッチを適用しますがif(fun()==true)、MISRAに準拠するためだけにパッチを適用する必要はありません。

MISRA-C:2004 / MISRA-C:2012準拠のコードを取得するためのソリューション:

bool fun1 (void); /* you must declare the function before using it and it must use void */

...

if(fun1())
{    
  /*statement1*/   /* Note that you can't use // comments in C90 or MISRA-C:2004 */
}    
else    
{    
  /*statement2*/
}

...

bool fun1 (void) /* must use void */
{    
  /* return is not a controlling expression, no need for compound statements.
     No need to cast, the result of && is essentially boolean.
     MISRA-C:2004 has no requirement to cast to underlying type if using booleans.
  */
  return Global_variable1 && Global_Variable2;
}

グローバル変数を使用すると、他のMISRA-Cルールや、コードを保守する必要のある同僚とのトラブルに巻き込まれる可能性があることに注意してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SlackメッセージペイロードのJSON出力の何が問題になっていますか?

分類Dev

この次のコードの何が問題になっていますか?

分類Dev

次のコードの何が問題になっていますか?

分類Dev

次のPHPコード部分の何が問題になっていますか?

分類Dev

次のJavaコードの何が問題になっていますか?

分類Dev

次のJavaコードの何が問題になっていますか?

分類Dev

この形の良いエラーメッセージの何が問題になっていますか

分類Dev

cの私のコードの何が問題になっていますか

分類Dev

このC ++のコードの何が問題になっていますか?

分類Dev

コードの何が問題になっていますか?

分類Dev

次のfindstrバッチコードの何が問題になっていますか?

分類Dev

メッセージパッシングの例の何が問題になっていますか?

分類Dev

このCコードの何が問題になっていますか?

分類Dev

私のC#コードの何が問題になっていますか

分類Dev

このコードの何が問題になっていますか?Objective C

分類Dev

私のCコードの何が問題になっていますか?

分類Dev

C ++のコードの何が問題になっていますか?

分類Dev

私のコードの何が問題になっていますか? c ++

分類Dev

このコードのメソッドの何が問題になっていますか?

分類Dev

マージコミットの何が問題になっていますか?

分類Dev

toString()メソッドのコードの何が問題になっていますか?

分類Dev

バッチコードの何が問題になっていますか?

分類Dev

C ++コード:これの何が問題になっていますか?

分類Dev

C#コードの何が問題になっていますか?

分類Dev

このJavaコードの短絡ロジックの何が問題になっていますか?

分類Dev

C ++マージソートコードの何が問題になっていますか?

分類Dev

私のC#アップデートコードの何が問題になっていますか?

分類Dev

お問い合わせフォームから送信されたメッセージがすべてスパムボックスに送信されるのはなぜですか?私のコードの何が問題になっていますか?

分類Dev

この C コードの何が問題になっていますか? 子供が帰ってこない?

Related 関連記事

  1. 1

    SlackメッセージペイロードのJSON出力の何が問題になっていますか?

  2. 2

    この次のコードの何が問題になっていますか?

  3. 3

    次のコードの何が問題になっていますか?

  4. 4

    次のPHPコード部分の何が問題になっていますか?

  5. 5

    次のJavaコードの何が問題になっていますか?

  6. 6

    次のJavaコードの何が問題になっていますか?

  7. 7

    この形の良いエラーメッセージの何が問題になっていますか

  8. 8

    cの私のコードの何が問題になっていますか

  9. 9

    このC ++のコードの何が問題になっていますか?

  10. 10

    コードの何が問題になっていますか?

  11. 11

    次のfindstrバッチコードの何が問題になっていますか?

  12. 12

    メッセージパッシングの例の何が問題になっていますか?

  13. 13

    このCコードの何が問題になっていますか?

  14. 14

    私のC#コードの何が問題になっていますか

  15. 15

    このコードの何が問題になっていますか?Objective C

  16. 16

    私のCコードの何が問題になっていますか?

  17. 17

    C ++のコードの何が問題になっていますか?

  18. 18

    私のコードの何が問題になっていますか? c ++

  19. 19

    このコードのメソッドの何が問題になっていますか?

  20. 20

    マージコミットの何が問題になっていますか?

  21. 21

    toString()メソッドのコードの何が問題になっていますか?

  22. 22

    バッチコードの何が問題になっていますか?

  23. 23

    C ++コード:これの何が問題になっていますか?

  24. 24

    C#コードの何が問題になっていますか?

  25. 25

    このJavaコードの短絡ロジックの何が問題になっていますか?

  26. 26

    C ++マージソートコードの何が問題になっていますか?

  27. 27

    私のC#アップデートコードの何が問題になっていますか?

  28. 28

    お問い合わせフォームから送信されたメッセージがすべてスパムボックスに送信されるのはなぜですか?私のコードの何が問題になっていますか?

  29. 29

    この C コードの何が問題になっていますか? 子供が帰ってこない?

ホットタグ

アーカイブ