メインコンテンツ

AUTOSAR C++14 Rule M27-0-1

The stream input/output library <cstdio> shall not be used.

説明

ルール定義

The stream input/output library <cstdio> shall not be used.

根拠

getsfgetposfopenftell など、cstdio の関数には未指定、未定義、および処理系定義の動作があります。

次に例を示します。

  • 関数 gets:

    char * gets ( char * buf );
    において、標準入力で渡された文字数がバッファー buf を超えているかどうかはチェックしません。入力がバッファーを超えている場合、この関数では予期しない動作が生じる可能性があります。

  • 関数 fopen には、エラーに対して errno を設定するかどうか、または標準的なモード指定子の後ろに追加文字を受け入れるかどうかに関する実装固有の動作があります。

Polyspace 実装

cstdio ライブラリから関数を使用すると、Polyspace® はこのルールの違反を報告します。Polyspace は、以下の関数 cstdio の使用を検出します。

  • removerename などのファイル操作関数。

  • fclosefflushfopen などのファイル アクセス関数。

  • fprintffscanfprintfscanf などの書式設定付き入力/出力関数。

  • fgetcfgetsfputcgetc などの文字入力/出力関数。

  • freadfwrite などの直接入力/出力関数。

  • fgetposfsetpos などのファイル位置付け関数。

  • clearerrferrorperror などのエラー処理関数。

トラブルシューティング

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

すべて展開する

#include <cstdio>

void func()
{
    char array[10];
    fgets(array, sizeof array, stdin); //Noncompliant
}

fgets() の使用はこのルールに違反します。

チェック情報

グループ: Input/output library
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入