ifndef/define/endif”主要目的是防止頭文件的重復包含和編譯
比如你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,於是問題來了,大量的聲明沖突。
還是把頭文件的內容都放在#ifndef和#endif中吧。不管你的頭文件會不會被多個文件引用,你都要加上這個
1.用法::標識的命名規則一般是頭文件名全大寫,前后加下划線,並把文件名中的“.”也變成下划線,如:stdio.h
.h文件下
#ifndef XX_H //放在XX.h被重復引用
#define XX_H
.....
#endif
2.舉個例子:
假設你的工程里面有4個文件,分別是Stock.cpp, b.h, c.h, d.h。
Stock.cpp的頭部是:
#include "b.h "
#include "c.h "
b.h和c.h的頭部都是:
#include "d.h "
而d.h里面有class Stock的定義。
運行:
編譯器編譯Stock.cpp的時候,先根據頭文件#include "b.h "去編譯b.h這個問題,再根據b.h里面的#include "d.h ",去編譯d.h的這個文件,這樣就把d.h里面的class D編譯了;
然后再根據Stock.cpp的第二句#include "c.h ",去編譯c.h,最終還是會找到的d.h里面的class D,但是class D之前已經編譯過了,所以就會報重定義錯誤。
加上ifndef/define/endif,就可以防止這種重定義錯誤。