メインコンテンツ

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

MISRA C++:2008 Rule 27-0-1

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

説明

ルール定義

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

根拠

gets()fgetpos()fopen()ftell() など、cstdio の関数には未指定、未定義、および処理系定義の動作があります。

次に例を示します。

  • 関数 gets():

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

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

Polyspace 実装

<cstdio> で宣言されている関数を使用すると、Polyspace® はこのルールの違反を報告します。Polyspace は、以下の関数 cstdio の使用を検出します。

  • remove()rename() などのファイル操作関数。

  • fclose()fflush()fopen() などのファイル アクセス関数。

  • fprintf()fscanf()printf()scanf() などの書式設定付き入力/出力関数。

  • fgetc()fgets()fputc()getc() などの文字入力/出力関数。

  • fread()fwrite() などの直接入力/出力関数。

  • fgetpos()fsetpos() などのファイル位置付け関数。

  • clearerr()ferror()perror() などのエラー処理関数。

トラブルシューティング

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

すべて展開する

#include <cstdio>

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

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

チェック情報

グループ: Input/output Library
カテゴリ: 必要

バージョン履歴

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.