dポイントプレゼントキャンペーン実施中!

下記の(1)、(2)のファイルについての質問になります。


(1)cファイル

#include <stdio.h>

/******************/
/* 表示モード処理 */
/******************/
void view_mode( FILE *fp_in )
^^^^
{
chardata;


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)では、何故かはコンパイルが通らないので、疑問に思っております。

お手数ですが、ご教授の程お願いたします

A 回答 (3件)

(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」って書けないのです。
    • good
    • 1

FILEという型はstdio.hで宣言されています。


(1)はstdio.hをincludeしているのでエラーが出ませんが、(2)はしていないのでFILEが不明な識別子であるとしてエラーを出します。

(2)はヘッダーファイルだということなので、どこかの.cファイルからincludeしていると思います。includeしている.cファイル全てで(2)より先にstdio.hをincludeすればエラーは出なくなります。
あるいは(2)でstdio.hをincludeしてもエラーは出なくなります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/04/03 15:08

testddga.cの最初((2)のヘッダファイルをincludeする前)に


#include <stdio.h>
を追加して下さい。
もしくは(2)のヘッダファイルに #include <stdio.h> を含めてしまって下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/03 15:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!