メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2012 Rule 17.11

A function that never returns should be declared with a _Noreturn function specifier

R2024a 以降

説明

ルール定義

A function that never returns should be declared with a _Noreturn function specifier 1 .

This rule comes from MISRA C™:2012 Amendment 3.

根拠

呼び出し元に戻らない関数の宣言で _Noreturn 指定子が使用されていない場合、この関数が意図的に戻らないのか、プログラム ロジックのエラーが原因で戻らないのかが明確ではありません。

Polyspace 実装

関数から呼び出し元への return パスがないのに、その関数の宣言で _Noreturn 指定子が使用されていない場合、ルール チェッカーは違反を報告します。

このチェッカーがルールの違反を報告するのは、Bug Finder 解析で C 言語標準を C11 以降として指定した場合のみです。詳細については、C 標準バージョン (-c-version) を参照してください。

トラブルシューティング

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

すべて展開する

この例では、関数 checkID()_Noreturn 指定子を使用して宣言されています。関数 verifyID() および assessID() はどちらも checkID() を呼び出すため、それぞれの呼び出し元に戻ることができません。

  • 関数 verifyID() の宣言では _Noreturn 指定子が使用されていないため、このルールに違反しています。

  • 関数 assessID() の宣言では _Noreturn 指定子が使用されているため、このルールに違反していません。

#include <stdint.h>

_Noreturn void checkID(int32_t ID);

void verifyID(int32_t ID) { //Noncompliant
    checkID(ID);
}

_Noreturn void assessID(int32_t ID) { //Compliant
    checkID(ID);
}

チェック情報

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

バージョン履歴

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.