メインコンテンツ

MISRA C:2023 Rule 17.4

All exit paths from a function with non-void return type shall have an explicit return statement with an expression

R2024a 以降

説明

ルール定義

All exit paths from a function with non-void return type shall have an explicit return statement with an expression 1 .

根拠

void 関数が明示的に値を返さないが呼び出し元の関数がその戻り値を使用する場合、動作は未定義です。この動作を回避するには、以下の手順に従います。

  • return ステートメントに明示的な式を与えます。

  • 実行中に、少なくとも 1 回 return ステートメントを必ず実行するようにします。

C99 以降を使用する場合は例外として、main() 関数に明示的な return ステートメントが含まれていないことは、このルールに準拠しています。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

int absolute(int v) {
    if(v < 0) {
        return v;
    }
} // Non-compliant   


int main(){
	//...
} //Compliant by exception

この例では、v >= 0 の実行パスに return ステートメントがないため、関数 absolute はこのルールに違反しています。このルールでは main() 関数に明示的な return ステートメントが含まれている必要がないため、Polyspace®main() 関数で違反を報告しません。

#define SIZE 10
int table[SIZE];

unsigned short lookup(unsigned short v) {
    if((v < 0) || (v > SIZE)) {
        return; // Non-compliant 
    }
    return table[v];
} 

この例では、if ブロックの return ステートメントに明示的な式がないため、ルールに違反します。

チェック情報

グループ: 関数
カテゴリ: Mandatory
AGC カテゴリ: Mandatory

バージョン履歴

R2024a で導入


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.