/*
#ifndef _STDAFX_H
#define _STDAFX_H
#include ? ? ? ? //cin ?cout
#include ? ? ? ? ? //malloc ?free
#include ? ? ? ? ? //strcpy
#include ? ? ? ? ? //exit()
#endif
*/
(1)內(nèi)容:在頭文件(StdAfx.h)開頭寫上兩行:
#ifndef _STDAFX_H
#define _STDAFX_H//一般是文件名的大寫
············
············
頭文件結(jié)尾寫上一行:
#endif
(2)作用:主要目的是防止頭文件的重復(fù)包含和編譯
例如:
假設(shè)你的工程里面有4個(gè)文件,分別是 a.cpp , b.h, ?c.h, ? d.h。
a.cpp的頭部是:
#include ??"b.h "
#include ??"c.h "
b.h和c.h的頭部都是:
#include ??"d.h "而d.h里面有int a,即a的定義。這樣一來,編譯器編譯a.cpp的時(shí)候,先根據(jù)#include ??"b.h "去編譯b.h這個(gè)文件,再根據(jù)b.h里面的#include ??"d.h ",去編譯d.h的這個(gè)文件,這樣就把d.h里面的int a編譯了;然后再根據(jù)a.cpp的第二句#include ??"c.h ",去編譯c.h,最終還是會(huì)找到的d.h里面的int a,但是int a之前已經(jīng)編譯過了,所以就會(huì)報(bào)重定義錯(cuò)誤。
加上ifndef/define/endif,就可以防止這種重定義錯(cuò)誤。
(3)另外還有一點(diǎn)需要注意:
在其他文件如main.cpp在使用StdAfx.h的同時(shí)又用到其他函數(shù)庫時(shí),要注意函數(shù)庫放的位置
如:
main.cpp:
#include
#include"StdAfx.h"
.........
運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤?。。。≡颍?/p>
編譯器通過一個(gè)頭文件stdafx.h來使用預(yù)編譯頭文件。編譯器認(rèn)為,所有在指令#include"stdafx.h"前的代碼都是預(yù)編譯的,它跳過#include"stdafx.h"指令,使用projectname.pch編譯這條指令之后的所有代碼。
因此,所有的MFC實(shí)現(xiàn)文件第一條語句都是:#include"stdafx.h"。在它前面的所有代碼將被忽略,所以其他的頭文件應(yīng)該在這一行后面被包含。否則,你將會(huì)得到“Nosuchfileordirectory”這樣讓你百思不得其解的錯(cuò)誤提示。
所以要把#include"StdAfx.h"放在最前面(下面是正確的形式)
main.cpp:
#include"StdAfx.h"
#include
.........