メインコンテンツ

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

MISRA C:2023 Rule 8.10

An inline function shall be declared with the static storage class

R2024a 以降

説明

ルール定義

An inline function shall be declared with the static storage class 1 .

根拠

外部リンクを含めて宣言されているが、同じ翻訳単位内で定義されていないインライン関数を呼び出すと、その関数がインライン化されないことがあります。インライン化から想定される実行時間の短縮が起こらない可能性があります。

インライン関数を複数の翻訳単位で使用可能にする場合も、static 指定子で定義できます。この場合、ヘッダー ファイルに定義を配置します。関数をインライン化するすべてのファイルにそのヘッダー ファイルをインクルードします。

Polyspace 実装

ルール チェッカーは、static 指定子が付随せずに inline 指定子が含まれている定義にフラグを設定します。

トラブルシューティング

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

すべて展開する

inline double mult(int val);
inline double mult(int val) {   /* Non compliant */
    return val * 2.0;
}

static inline double div(int val);
static inline double div(int val) {  /* Compliant */
    return val / 2.0;
}

この例では、mult の定義が準拠していません。これが static ストレージ指定子を使用せずにインライン化されているためです。

チェック情報

グループ: 宣言と定義
カテゴリ: 必要
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.