#ifndef …
#define …
…
#endif
作用: 防止頭文件的重複包含和編譯
例如: 假設你的工程裏面有4個文件,分別是 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的時候,先根據#include "b.h "去編譯b.h這個文件,再根據b.h裏面的#include "d.h ",去編譯d.h的這個文件,這樣就把d.h裏面的int a編譯了;然後再根據a.cpp的第二句#include "c.h ",去編譯c.h,最終還是會找到的d.h裏面的int a,但是int a之前已經編譯過了,所以就會報重定義錯誤。
加上ifndef/define/endif,就可以防止這種重定義錯誤。
詳情參考文章:https://www.jianshu.com/p/2c349d00f712