
下記の(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)では、何故かはコンパイルが通らないので、疑問に思っております。
お手数ですが、ご教授の程お願いたします
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」って書けないのです。
No.3
- 回答日時:
FILEという型はstdio.hで宣言されています。
(1)はstdio.hをincludeしているのでエラーが出ませんが、(2)はしていないのでFILEが不明な識別子であるとしてエラーを出します。
(2)はヘッダーファイルだということなので、どこかの.cファイルからincludeしていると思います。includeしている.cファイル全てで(2)より先にstdio.hをincludeすればエラーは出なくなります。
あるいは(2)でstdio.hをincludeしてもエラーは出なくなります。
stdio.hをインクルードしたら、コンパイルが通るようになりました。
インクルードのし忘れが原因でしたね。
大変、失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
fortranでプログラムを実行する...
-
適切な変換関数が存在しない???
-
RightとLeft関数のライブ...
-
デバッグ中のエラーのことで教...
-
エクセルでマクロを実行すると...
-
Handlesについて
-
「マクロが再定義されました」...
-
sys/time.hのインクルードがで...
-
コンパイルできません。
-
c言語をgcc.exeにコンパイルし...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
VBScriptのエラーの見つけ方及...
-
HEWを使用しているのですが、こ...
-
バッチからsqlplusの接続エラー...
-
visual C++ でビルドの中止がで...
-
VisualStudio2010 VC++ エラー
-
【R8C/Tinyマイコン】エラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
コンパイルできません。
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
バッチからsqlplusの接続エラー...
-
HEWを使用しているのですが、こ...
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
DLL関数を使ったプログラム
-
Arduinoに関する質問
-
sys/time.hのインクルードがで...
-
Visual Studioのstrcpy_sについて
-
BC30002: 型 'ListItem' が定義...
-
RightとLeft関数のライブ...
-
VBAでファイルを開くプログラム...
-
HANDLEの宣言でのエラー
おすすめ情報