#ifndef
它是if not define 的簡寫,是宏定義的一種,確切的說,是預處理功能三種(宏定義、文件包含、條件編譯)中的一種----條件編譯。
在c語言中,對同一個變量或者函數進行多次聲明是不會報錯的。
所以如果h文件里只是進行了聲明工作,即使不使用# ifndef宏定義,多個c文件包含同一個h文件也不會報錯。
但是在c++語言中,#ifdef的作用域只是在單個文件中。
如果h文件里定義了全局變量,即使采用#ifdef宏定義,多個c文件包含同一個h文件還是會出現全局變量重定義的錯誤。
加了#ifndef,則不會出現這種錯誤。
示例:
#ifndef x //先測試x是否被宏定義過
#define x
程序段1blabla~ //如果x沒有被宏定義過,定義x,並編譯程序段 1
#endif
程序段2blabla~ //如果x已經定義過了則編譯程序段2的語句,“忽視”程序段 1
條件指示符#ifndef 的最主要目的是防止頭文件的重復包含和編譯。
了解:條件編譯當然也可以用條件語句來實現。 但是用條件語句將會對整個源程序進行編譯,生成的目標程序程序很長。
而采用條件編譯,則根據條件只編譯其中的程序段1或程序段2,生成的目標程序較短。
如果條件選擇的程序段很長,采用條件編譯的方法是十分必要的。
#ifndef 和 #endif 要一起使用,如果丟失#endif,可能會報錯。
文章引用自各路高手的博文,在此一並感謝,謝謝諸位的知識共享。
該博文不是我的原創,我只是搬運工!
如果發布內容有侵權行為,請與我聯系,我核實以后將刪除所有侵權內容,謝謝!