淺談#ifndef~#define~#endif~的作用

/*

#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

.........

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容