天天看點

#include "stdafx.h" 錯誤?

#include "stdafx.h" 錯誤?

問題:

  先打開一個以前做了一下的工程,編譯通過,能運作。稍微修改了一下代碼(隻是修改一個參數使寫入ini檔案的整數由0變為10),這時編譯通不過了,提示頭檔案“stdafx.h”編譯錯誤(具體錯誤提示忘記了),錯誤位置指向應用程式類的源檔案的語句“#include "stdafx.h"”。不包含這個檔案是不行的,左看右看沒找出個原因來,甚至把代碼改回原來的樣子,還是不行。

解決辦法:

  這種情況隻要重新将“stdafx.cpp”編譯一下就可以了,一試,馬上能編譯運作了

原理:

  預編譯頭檔案(一般擴充名為.pch),是把一個工程中較穩定的代碼預先編譯好放在一個檔案(.pch)裡.這些預先編譯好的代碼可以是任何的c/c++代碼--甚至可以是inline函數,隻它們在整個工程中是較為穩定的,即在工程開發過程中不會經常被修改的代碼.

   為什麼需要預編譯頭檔案?一言以蔽之:提高編譯速度.一般地,編譯器以檔案為機關編譯,如果修改了一工程中的一個檔案則所有檔案都要重新編譯,包括頭檔案裡的所有東西(eg.macro宏,preprocessor預處理),而vc程式中,這些頭檔案中所包括的東西往往是非常大的,編譯之将占很長的時間.但它們又不常被修改,是較穩定的,為單獨的一個小檔案而重新編譯整個工程的所有檔案導緻編譯效率下降,是以引入了.pch檔案.

  如何使用預編譯頭檔案以提高編譯速度?要使用預編譯頭檔案,必須指定一個頭檔案(.h),它包含我們不會經常修改的代碼和其他的頭檔案,然後用這個頭檔案(.h)來生成一個預編譯頭檔案(.pch)vc預設的頭檔案就是stdafx.h,因為頭檔案是不能編譯的,是以我們還需要一個.cpp檔案來作橋梁,vc預設的檔案為stdafx.cpp,這個檔案裡隻有一句代碼就是:#include "stdafx.h".接下來要用它生成.pch檔案,涉及到幾個重要的預編譯指令:/yu,/yc,/yx,/fp.簡單地說,/yc是用來生成.pch檔案的編譯開關.在project->setting->c/c++的category裡的precompiledheader,然後在左邊的樹形視圖中選擇用來編譯生成.pch檔案的.cpp檔案(預設即stdafx.cpp)你就可以看到/yc這個開關,它表示這個檔案編譯了以後是否生成.pch檔案(可能/yc的c表示create)./fp指令指定生成的.pch檔案的名字及路徑(可能/fp的p代表path)./yu的u即use使用,工程中隻要包括了.h檔案的檔案都會有這個/yu指令.如果選擇自動automatic...的話則原來為/yc的地方就換成了/yx指令.如果選擇自動,則每次編譯時編譯器會看以前有沒有生成過.pch檔案,有則不現生成否則就再次編譯産生.pch檔案.

注意:

a,實際上,由appzard項目向導生成的預設的頭檔案及cpp檔案stdafx.h和stdafx.cpp可以是任何名字的.原因很簡單.但如果你要這樣做就要記得修改相應  的project->setting...下的幾個預編譯指令(/yc,/yu,/yx,/fp)的參數.

b.在任何一個包括了将要預編譯的頭檔案而使用了.pch檔案的工程檔案的開頭,一定必須要是在最開頭,你要包含那個指定生成.pch檔案的.h檔案(通過.cpp檔案包       括,預設為stdafx.cpp),如果沒包括将産生我最開頭産生的錯誤.如果不是在最開頭包括将産生讓你意想不到的莫名其妙錯誤,如若不信,盍為試之?

c.預編譯檔案.pch生成之很耗時間,而且生成之後它也很占磁盤空間,常在5-6m,注意項目完成之後及時清理無用的.pch檔案以節約磁盤空間.

d.如果丢了或删了.pch檔案而以後要再修改工程檔案時,可将指定的/yc的.cpp檔案(預設為stdafx.cpp)重新編譯一次即可再次生成.pch檔案,不用傻傻的按f7 或rebuild all

#include "stdafx.h" 錯誤?
上一篇: 基數排序
下一篇: getchar()和EOF

繼續閱讀