4

コードをテスト (静的解析) して、misra c++ 2008 を尊重しているかどうかを確認すると、次のエラーが表示されます。

関数がすべてのパスで値を返すわけではありません。

関数は次のようになります

int* Dosomething(string v)
{
   int* retvalue = NULL;

   if( 0 == exists(v) )
   {
      throw("error: value doesn't exist");
   }
   else
   {
     retvalue = dosomecomputations(v);
   }

   return retvalue;
}

エラーに応じて呼び出し元が何かを行うため、本当に例外をスローする必要があります。考えられるエラーのリストは膨大になる可能性があり、このコード サンプルのように値が存在しないというだけではありません。

どうすれば管理できますか? この場合、私が使用しているツールはそれをミスラへの非準拠と見なすべきではないと思います。

アドバイスありがとうございます。

ロニー。

4

1 に答える 1

3

次のコードは、MISRA C++ 2008 ルールが適用されている場合、警告/エラーを報告しません。したがって、ツールの問題である可能性が最も高いです。または、投稿されたコードは影響を受ける部分ではありません。

#include <string>

int exists(std::string v){ (void)v; return 1; }
int* dosomecomputations(std::string v){ (void)v; return NULL; }

int* dosomething(std::string v){
  int* retvalue = NULL;
  if( 0 == exists(v) ){
    throw("error: value doesn't exist");
  }else{
    retvalue = dosomecomputations(v);
  }
  return retvalue;
}

上記のスニペットだけを MISRA チェッカーでチェックして、まだ何かが報告されているかどうかを確認してください。問題が解決しない場合は、ツール ベンダーに連絡して、その問題について尋ねます。

于 2013-12-06T14:18:20.260 に答える