メインコンテンツ

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

MISRA C++:2008 Rule 3-3-2

If a function has internal linkage then all re-declarations shall include the static storage class specifier

説明

ルール定義

If a function has internal linkage then all re-declarations shall include the static storage class specifier. 1

根拠

関数宣言で static ストレージ クラス指定子が使用される場合、その関数は内部リンクをもちます。それ以降に行われるこの関数の再宣言は、static 指定子がなくても内部リンクをもちます。

ただし、static キーワードを明示的に指定しないと、宣言からは関数の内部リンクの有無がすぐには判明しなくなります。

Polyspace 実装

Polyspace® は、static リンクをもつ関数が宣言されたが、これらの関数の再宣言が外部リンクをもつ場合に、違反を報告します。

外部リンクをもつオブジェクトと関数の詳細については、ストレージ クラス指定子を参照してください。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

static void func1 ();
static void func2 ();

void func1() {}  //Noncompliant
static void func2() {}

この例では、関数 func1()static として宣言されていますが、static 指定子を使用せずに定義されています。これはこのルールに違反します。

チェック情報

グループ: Basic Concepts
カテゴリ: 必要

バージョン履歴

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.