c語言防止頭文件重復(fù) 頭文件被多次包含是什么意思?
頭文件被多次包含是什么意思?一些頭文件的重復(fù)包含只會(huì)增加編譯工作的工作量,不會(huì)引起太多問題。這只是低效的編譯。某些頭文件的重復(fù)包含會(huì)導(dǎo)致錯(cuò)誤,例如在頭文件中定義全局變量(雖然不建議使用此方法,但C規(guī)范
頭文件被多次包含是什么意思?
一些頭文件的重復(fù)包含只會(huì)增加編譯工作的工作量,不會(huì)引起太多問題。這只是低效的編譯。某些頭文件的重復(fù)包含會(huì)導(dǎo)致錯(cuò)誤,例如在頭文件中定義全局變量(雖然不建議使用此方法,但C規(guī)范允許使用此方法)如果頭文件包含在循環(huán)中,則取決于編譯器。有些會(huì)智能地處理它,就像include one一樣,有些會(huì)報(bào)告錯(cuò)誤,有些會(huì)死鎖,導(dǎo)致編譯器崩潰(只有非常低級(jí)的編譯器才能看到它)。不管怎樣,使用ifnde XXX#define XXX或其他方法來避免頭文件的重復(fù)包含只有好處沒有壞處是個(gè)好習(xí)慣
~]?include文件的缺點(diǎn)是頭文件可能被多次包含。要說明此錯(cuò)誤,請(qǐng)考慮以下代碼:?包括“x.h”?包括“x.h”?顯然,文件x.h包含了兩次,沒有人會(huì)故意編寫這樣的代碼。但是下面的代碼:#include “A.H”#include “B.H”看起來沒問題。如果A.H和B.H都包含一個(gè)頭文件x.H,那么x.H在這里也包含了兩次,但是它的形式不是很明顯。在大多數(shù)情況下,大型程序中會(huì)出現(xiàn)多次包含,這通常需要大量的頭文件,因此不容易找到重復(fù)包含。為了解決這個(gè)問題,我們可以使用條件編譯。如果所有頭文件都按以下方式編寫:#ifndef_uuheadername_uh#define uuheadername#則消除了多次包含的危險(xiǎn)。第一次包含頭文件時(shí),將正常處理并刪除符號(hào)uheadernameuh定義為1。如果再次包含頭文件,則條件編譯將忽略其內(nèi)容。SymbolsHEADERNAMEuh根據(jù)包含的頭文件的文件名命名,避免了其他頭文件使用同一個(gè)Symbols引起的沖突。但是,您必須記住,即使頭文件的所有內(nèi)容都將被忽略,預(yù)處理器仍會(huì)讀取整個(gè)頭文件。由于此處理會(huì)減慢編譯速度,因此應(yīng)盡可能避免包含多個(gè)內(nèi)容。
如何避免頭文件被重復(fù)包含?
例如,b.cpp使用b.H,然后包含它。A.cpp也使用B.H,然后包括它。然后main函數(shù)同時(shí)使用b.cpp和a.cpp中的函數(shù),因此main函數(shù)應(yīng)該包括b.H,include a.H,,,,,并且a.H已經(jīng)包括b.H