1. 程式人生 > >fatal error C1010: 在查詢預編譯頭時遇到意外的檔案結尾

fatal error C1010: 在查詢預編譯頭時遇到意外的檔案結尾

一、概念:

1、預編譯:就是編譯器首先編譯某個檔案(稱為預編譯標頭檔案),然後將這個編譯結果儲存起來,之後如果有其他原始檔include了這個“預編譯標頭檔案”的時候,則自動從這個編譯結果提取需要的資訊進行編譯。

2、預編譯結果檔案(Precompiled header file):就是那個用來儲存已經編譯了的符號資訊的檔案(.PCH作為字尾)

3、生成預編譯結果檔案(Create Precompiled header file):我們說原始檔A通過檔案B“生成預編譯結果檔案”是指編譯A的時候將其中編譯B的編譯結果儲存成預編譯結果檔案。一般使用嚮導的話,A檔案就是“stdafx.cpp”,B檔案是“stdafx.h”。stdafx.cpp中就一行語句:

#include “stdafx.h”

4、使用預編譯頭(Using precompiled header):我們說某個原始檔(a.cpp)通過“stdafx.h”來使用預編譯結果是指編譯a.cpp的時候,如果a.cpp第一行include語句是#include “stdafx.h”的話,那麼直接取預編譯結果檔案的結果,不再重新編譯”stdafx.h”

二、嚮導是怎麼做的?

1、設定“stdafx.cpp”的預編譯選項是通過“stdafx.h”檔案來“生成預編譯結果檔案”。

2、其他原始檔的預編譯選項設定是通過“stdafx.h”來“使用預編譯頭”

三、使用原則?

1、將相對穩定的標頭檔案(比如CRT,STL,第三方固定的庫)全部寫在stdafx.h中。(是否使用stdafx.h依賴個人喜好,不過使用stdafx.h可以和嚮導保持一致)

2、全部原始檔第一行都加#include “stdafx.h”。

3、一些不能修改的原始檔(如果公共的程式碼,不具備許可權修改的程式碼),設定他的預編譯選項是“不使用預編譯頭”。注意,一定不能是選擇“自動生成預編譯頭”,因為這樣會將stdafx.h的結果沖掉(這個不知道是BUG還是設計的問題了,.^_^。)。

四、Q&A

Q、為什麼不全部使用“自動生成預編譯標頭檔案”?

A、“自動生成預編譯標頭檔案”和什麼都不用沒有什麼兩樣,編譯速度沒有質的提高。

Q、手工新增一個新的原始檔到專案的時候,經常出現類似錯誤:

fatal error C1010: unexpected end of file while looking for precompiled header directive

A、因為嚮導預設的設定是“使用預編譯頭”,但是你新加的檔案並沒有在第一行包含“stdafx.h”。解決的方法要麼修改成“不使用預編譯頭”,要麼新增一行#include “stdafx.h”