C/C++中#ifndef的用法

如下所示,代碼中為什么要有這樣的結(jié)構(gòu)呢?

編寫頭文件test.h時,在頭文件開頭寫上兩行,如下:
#ifndef __TEST_H
#define __TEST_H
"
...... #內(nèi)容
......
"
頭文件結(jié)尾寫上一行:
#endif

這是因為:防止文件中的內(nèi)容被重復(fù)定義
我們來看下面這樣一個例子,定義了main.cpp,a.h,b.h,c.h,其中main.cpp包含了a.h和b.h,a.h包含了c.h,b.h也包含了c.h。

main.cpp

a.h

b.h

c.h

這樣編譯是無法通過的,因為在編譯main.cpp時先運行#include "a.h",此時編譯了a.h中的c.h,也即給int a變量做了定義,后運行到#include "b.h",此時編譯了b.h中的c.h,又給int a進行了重定義,所以報了重定義的錯誤:
發(fā)生重定義錯誤

解決的方法就是,使用#ifndef系列語句塊將c.h中的int a = 10;這一語句包裝起來,包裝結(jié)果如下:

#ifndef UNTITLED2_C_H
#define UNTITLED2_C_H
int a = 10;
#endif //UNTITLED2_C_H

這樣就可以通過編譯,main.cpp文件也可以正常運行了。所以我們在編寫頭文件時,盡量將所有語句放在#ifndef語句塊中,防止重定義報錯。至于命名規(guī)則,通常#ifndef以及#define后面接的是頭文件名稱的全部字符大寫,如#ifndef __C_H,當(dāng)然也可以自行任意命名,為編譯器添加一個可識別的標(biāo)簽即可

參考鏈接:#ifndef用法_william_hehe的博客-CSDN博客

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

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

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