メインコンテンツ

MISRA C++:2008 Rule 0-1-7

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

説明

ルール定義

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

根拠

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

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

関数の戻り値を意図的に無視する場合は、戻り値を void にキャストします。

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 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
}

この例では、関数 assignMemory() およびメソッド std::vector::erase() の呼び出しの戻り値が使用されないか、void にキャストされる場合、Polyspace はこれらの関数およびメソッドの呼び出しに対して違反を報告します。

チェック情報

グループ: Language Independent Issues
カテゴリ: 必要

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.