メインコンテンツ

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

MISRA C:2012 Rule 1.5

Obsolescent language features shall not be used

R2024a 以降

説明

ルール定義

Obsolescent language features shall not be used 1 .

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

根拠

このルールでは、C 標準で使用されなくなった機能として宣言されている機能の使用を禁止しています (たとえば、C11 規格の 6.11 節 "Future language directions" と 7.31 節 "Future library directions" を参照してください)。これらの機能には、この標準でより有効な代替機能が規定されているか、安全でない動作を示す可能性があることから、使用されなくなった機能として宣言されています。この標準の今後のバージョンで、これらの機能が廃止される可能性もあります。

Polyspace 実装

ルール チェッカーは、使用されなくなった言語機能の使用をチェックします。

使用されなくなった言語機能チェッカーの実装言語バージョン

static ストレージ クラス指定子を使用せずに、ファイル スコープで内部リンクを使用して識別子を宣言する。

ルール チェッカーは、識別子が複数回宣言されていて、static ストレージ クラス指定子を使用している宣言とそうでない宣言がある場合に違反を報告します。

C99、C11、C18
宣言内での宣言指定子で、ストレージ クラス指定子が先頭以外の位置にある。

ルール チェッカーは、staticexternautoregister__thread などのストレージ クラス指定子を、先頭以外の位置に配置している宣言に対して違反を報告します。たとえば次のように、データ型の後に配置されているものです。

int static var; //Noncompliant

C99、C11、C18

(プロトタイプ形式のパラメーター型宣言子ではなく) 空のかっこを使用した関数宣言の使用。

ルール チェッカーは、関数宣言でパラメーターがないことを示すために (void) ではなく空のかっこ () を使用している場合に違反を報告します。

C99、C11、C18

(プロトタイプ形式のパラメーター型宣言子と識別子宣言子ではなく) 別個のパラメーター識別子リストと宣言リストを使用した関数定義の使用。

ルール チェッカーは、次のようにパラメーター型がパラメーター名から分離されている K&R 形式の関数定義に対してフラグを設定します。

int foo (x, y) //Noncompliant
    int x;
    char y;
{
}

C99、C11、C18

(stdatomic.h で定義された) マクロ ATOMIC_VAR_INIT の使用。

ルール チェッカーは、マクロ ATOMIC_VAR_INIT の使用に対して違反を報告します (ヘッダー ファイル stdatomic.h がインクルード済みの場合)。

C18

(stdbool.h で定義された) マクロ booltrue、および false の定義を解除して、再定義できるようにする機能。

ルール チェッカーは、マクロ booltrue、および false の定義を解除して再定義する #undef および #define ステートメントに対して違反を報告します (ヘッダー ファイル stdbool.h がインクルード済みの場合)。

C99、C11、C18

(stdio.h で定義された) gets() 関数の使用。

ルール チェッカーは、gets() 関数の使用に対して違反を報告します (ヘッダー ファイル stdio.h がインクルード済みの場合)。

C99

ファイル位置インジケーターがゼロとなっているバイナリ ストリームでの ungetc() 関数の使用。

ルール チェッカーは、ファイル位置インジケーターがゼロとなっているストリームで関数 ungetc() が使用されている場合に違反を報告します。次に例を示します。

void addToFile() {
    FILE* my_file = fopen("my_file", "a");
    char c;
    c = getc(my_file);
    fseek(my_file, 0, SEEK_SET);
    // File position indicator is 0.
    ungetc(c, my_file); //Noncompliant
}

C99、C11、C18

ゼロに等しいサイズ引数が指定された (stdlib.h で定義された) realloc() 関数の使用。

ルール チェッカーは、ゼロのサイズ引数が指定された realloc() 関数に対して違反を報告します (ヘッダー ファイル stdlib.h がインクルード済みの場合)。

C18

トラブルシューティング

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

チェック情報

グループ: 標準 C 環境
カテゴリ: 必要
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.