例如:要編寫頭文件test.h編譯器
在頭文件開頭寫上兩行:io
#ifndef _TEST_H編譯
#define _TEST_H//通常是文件名的大寫class
············test
············引用
頭文件結尾寫上一行:總結
#endif命名
大概是之前沒有學好吧,對這裏不是很理解,爲何要用這些呢?剛纔上網查了查,借鑑了點高手的,本身總結了一點,就寫在這裏了,有什麼錯誤之處,請大俠們指出di
1.好比你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,因而問題來了,大量的聲明衝突。文件
例如:
假設你的工程裏面有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裏面有class D的定義。
這樣一來,
編譯器編譯a.cpp的時候,先根據#include "b.h "去編譯b.h這個問題,再根據b.h裏面的#include "d.h ",去編譯d.h的這個文件,這樣就把d.h裏面的class D編譯了;
而後再根據a.cpp的第二句#include "c.h ",去編譯c.h,最終仍是會找到的d.h裏面的class D,可是class D以前已經編譯過了,因此就會報重定義錯誤。 加上ifndef/define/endif,就能夠防止這種重定義錯誤。
因此仍是把頭文件的內容都放在#ifndef和#endif中吧。 無論你的頭文件會不會被多個文件引用,你都要加上這個。 通常格式是這樣的: #ifndef <標識 > #define <標識 > ...... ...... #endif <標識 > 在理論上來講能夠是自由命名的,但每一個頭文件的這個「標識」都應該是惟一的。標識的命名規則通常是頭文件名全大寫,先後加下劃線,並把文件名中的「.」也變成下劃線,如:stdio.h #ifndef _STDIO_H_ #define _STDIO_H_ ...... #endif