メインコンテンツ

MISRA C++:2023 Rule 0.1.2

The value returned by a function shall be used

R2024b 以降

説明

ルール定義

The value returned by a function shall be used 1 .

根拠

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

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

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

Polyspace 実装

チェッカーは、次の場合に違反を報告します。

  • 関数の void 以外の型の戻り値が未使用のままで、明示的に void 型にキャストされない場合。

  • ラムダ、std::function オブジェクト、またはユーザー定義の operator() が関数呼び出し構文を使用して呼び出され、その戻り値が未使用のままになる場合。

関数 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 はこれらの関数およびメソッドの呼び出しに対して違反を報告します。

チェック情報

グループ: 言語に依存しない問題
カテゴリ: 必要

バージョン履歴

R2024b で導入


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.