メインコンテンツ

MISRA C:2023 Rule 1.4

Emergent language features shall not be used

R2024a 以降

説明

ルール定義

Emergent language features shall not be used 1 .

根拠

C11 規格の新しい言語機能の一部では、未定義、未指定、または処理系定義の動作が行われます。これらの機能は、開発者の想定に反する、明確に定義された動作を示す場合もあります。ルール 1.3 および命令 1.1 によって未定義および処理系定義の動作は禁止されていますが、想定に反する、明確に定義された動作を回避するために、ルール 1.4 によって一部の言語機能が即座に非推奨とされています。

Polyspace 実装

このルールでは、C11 規格の範囲チェック インターフェイスに関する Annex K のすべての機能 (0 に定義された __STDC_WANT_LIB_EXT1__ を除く) の使用を禁止しています。

トラブルシューティング

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

すべて展開する

#define __STDC_WANT_LIB_EXT1__ 1 //Noncompliant
#include <string.h>

void Copying_functions(void) {
    char buf1[10];
    char buf2[10];
    errno_t e;  //Noncompliant
    e = memcpy_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
    e = memmove_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
    e = strcpy_s(buf1,sizeof(buf1),buf2); //Noncompliant
    e = strncpy_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
}

この例では、マクロ __STDC_WANT_LIB_EXT1__ が 1 に設定されているため、(C11 規格の Annex K に従い) ヘッダー stdlib.h に定義された errno_t 型を使用できます。

チェッカーは、Annex K の他の関数に加え、1 となっているマクロの設定と変数 errno_t の定義の両方にフラグを設定します。

チェック情報

グループ: 標準 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.