メインコンテンツ

AUTOSAR C++14 Rule A0-1-2

The value returned by a function having a non-void return type that is not an overloaded operator shall be used

説明

ルール定義

The value returned by a function having a non-void return type that is not an overloaded operator shall be used.

根拠

未使用の戻り値はコーディング エラーまたは見落としを示している可能性があります。

オーバーロードされた演算子は、その使用法として、戻り値を使用しない場合がある組み込み演算子をエミュレートしなければならないため、このルールから除外されます。

Polyspace 実装

ルール チェッカーは、戻り値が使用されない場合や void 型に明示的にキャストされない場合に、void 以外の戻り値の型で関数に対する違反を報告します。

ただし、関数の memcpymemsetmemmovestrcpystrncpystrcatstrncat は、最初の引数へのポインターを返すだけなので、フラグは設定されません。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include <iostream>
#include <new>
#include <algorithm>
#include <cstdint>
#include <vector>

int assignMemory(int * ptr){
     int res = 1;
     ptr = new (std::nothrow) int;
     if(ptr==NULL) {
         res = 0;
     }
     return res;
}
void foo()
{


}

void main() {
	int val;
	int status;
	std::vector<std::int8_t> numVec{10,10,20,20,30,40,50,50,60};

	assignMemory(&val);   //Noncompliant
	status = assignMemory(&val); //Compliant
	(void)assignMemory(&val); //Compliant

	numVec.erase(std::unique(numVec.begin(), numVec.end()), numVec.end());// Noncompliant
}

この例では、Polyspace が、戻り値が使用されない関数に対する呼び出しにフラグを設定します。

  • main が関数 assignMemory に対する最初の呼び出しの戻り値を使用しないため、Polyspace は違反を報告します。

  • assignMemory に対する 2 回目の呼び出しの戻り値はローカル変数に代入されるため、このルールに準拠しています。

  • assignMemory に対する 3 回目の呼び出しは void にキャストされるため、このルールに準拠しています。

  • main が関数 std::vector::erase() から返されるオブジェクトを使用しないため、Polyspace は違反を報告します。

チェック情報

グループ: 言語に依存しない問題
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入

すべて展開する