• ベストアンサー

ヘッダファイルでのFILE型引数宣言について

下記の(1)、(2)のファイルについての質問になります。 (1)cファイル #include <stdio.h> /******************/ /* 表示モード処理 */ /******************/ void view_mode( FILE *fp_in ) ^^^^ { char data; while( 1 ){ /* ファイルから1文字読込み */ data = fgetc( fp_in ); /* ファイルの終了かをチェック */ if(data == EOF ){ break; } /* 表示処理 */ printf( "%c", data ); } return; } (2)ヘッダファイル void view_mode( FILE *fp_in ); ^^^^ ◆質問内容 (1)にview_modeの処理を書き、(2)にview_modeのプロトタイプ宣言をしていますが、 (1)はコンパイルが通るのですが、(2)はコンパイルが通りません。 エラー内容を見ると、 エラー E2147 testddga.c 1: 引数宣言は 'FILE' で始められない と表示されてしまいます。 (1)では、引数宣言にFILEを使用しているのにコンパイルが通り、 (2)では、何故かはコンパイルが通らないので、疑問に思っております。 お手数ですが、ご教授の程お願いたします

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

(2)で識別子「FILE」を使用する前に #include <stdio.h> をしていないから。 識別子「FILE」はstdio.hの中で定義されています。なのでstdio.hをインクルードしてからじゃないと識別子「FILE」を使用出来ません。 stdio.hをインクルードする前に識別子「FILE」を使用してしまうと「FILE」は「単なる変数名」になってしまいます。 「エラー E2147 testddga.c 1: 引数宣言は 'FILE' で始められない」 の意味は 「引数宣言は'int i'や'char c'などのintやcharのように型名で始めなければならず、iやcやFILEなどの単なる変数名では始められない」 と言う意味です。 要は、stdio.hをインクルードして typedef struct { (略) } FILE; /* This is the FILE object */ って宣言をしてからじゃないと「FILE」って書けないのです。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

FILEという型はstdio.hで宣言されています。 (1)はstdio.hをincludeしているのでエラーが出ませんが、(2)はしていないのでFILEが不明な識別子であるとしてエラーを出します。 (2)はヘッダーファイルだということなので、どこかの.cファイルからincludeしていると思います。includeしている.cファイル全てで(2)より先にstdio.hをincludeすればエラーは出なくなります。 あるいは(2)でstdio.hをincludeしてもエラーは出なくなります。

KGM
質問者

お礼

stdio.hをインクルードしたら、コンパイルが通るようになりました。 インクルードのし忘れが原因でしたね。 大変、失礼しました。

  • luka3
  • ベストアンサー率72% (434/598)
回答No.1

testddga.cの最初((2)のヘッダファイルをincludeする前)に #include <stdio.h> を追加して下さい。 もしくは(2)のヘッダファイルに #include <stdio.h> を含めてしまって下さい。

KGM
質問者

お礼

回答していただきありがとうございます。

関連するQ&A

専門家に質問してみよう