• ベストアンサー

MFCのエラーについて

「プリコンパイル済みヘッダーの検索中に予期せぬ EOF を検出しました」 というエラーが出ました。これを直すのにいろいろ試し結局 #include "stdafx.h"の表記をすることで直りました。 このstdafxヘッダーファイルはMFCを使用した時点で用意されるのですがこれを使うとなぜこのエラーがなくなるのかがわかりません。 どなたかおしえてください。よろしくお願いします

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

説明しようとすると、結構ややこしいのですが…。 VC++での一般的なプログラムの作成手順で、以下のようなファイルが出来ていたとします。 -----Test.cpp----- #include "stdafx.h" int main(int argc, char* argv[]) {   printf("Hello World!\n");   return 0; } これに、以下の.hファイルと.cppファイルを追加します。 -----foo.h----- int foo(void); -----foo.cpp----- int foo(void) { return 0; } この時点でコンパイルを実行すると、 d:\ほげほげ\foo.cpp(5) : fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 が出ます。 これは、 [プロジェクト]-[設定] 「プロジェクトの設定」ダイアログ 左上「設定の対象」に「Win32 Debug」 左側treeで、~\Sourcr Files\foo.cppを選択、 右側「C/C++」タブ カテゴリ「プリコンパイル済みヘッダー」を選ぶと、 「プリコンパイル済みヘッダー ファイル(pch)を使用」 このファイルまで「stdafx.h」 が選ばれていると思います。 この設定のために、コンパイラはfoo.cppのファイルを1行目から順に「stdafx.h」のインクルードを行っている行を検索します。 該当行が見つかった場合は、それ以前の行のソースコードはpchに予めコンパイルされているものとして無視します。 この例の場合は該当行が見つかる前にファイル末尾のEOFが見つかったために、上記のようなエラーが出てくるという仕組みです。 -- 通常はソース先頭の滅多に変更の無い#include部分を予めコンパイルしておくと言う事ですから、コンパイル時間が稼げますが、前述したようにstdafx以前のソースコードの変更を無視してくれるので、変なトラブルも起きる事があります。 個人的には嫌いなので、 #include "stdafx.h"行を削除。 stdafx.hファイルを削除。 ワークスペースのFileViewからstdafx.hおよびstdafx.cppを削除。 上記の設定で、pchを使用しない設定に変更。 と、使わないようにしています。 最近のPCの性能だと、コンパイル時間って気にならない事も多いし。

wsy920
質問者

お礼

返事遅くなって申し訳ありません。 まだまだわからない部分がありますがちょっとずつ理解して以降と思います。

その他の回答 (1)

回答No.1

"プリコンパイル・ヘッダを使用する" オプションをつけてコンパイルしているとき、 stdafx.h の includeを抜くとそうなります。

関連するQ&A