[C 隨手記]_使用Include Guard來避免重複Include標頭檔
其實我從C#跑來寫C總是覺得很多古老的C語言規則很綁手綁腳...
如果你用Visual Studio寫C,其實並不會如此嚴謹的對你的Code去作警告
例如前面的C99 problem
那當然越寫越多C..就發現Visual studio太好心了
但一旦拿這些Source code去別的IDE編譯,他立馬就會無情的送你一堆ERROR或者WARING MESSAGE…
今天的問題是會遇到redefine的問題,常見錯誤訊息是
error LNK1169: one or more multiply defined symbols found
也就是重新定義的問題,這個問題引起的原因是因為重複的引用相同的Header所造成…
解決方式就在寫標頭檔的時候,用
1: #ifndef xxx_H
2:
3: #define xxx_H
4:
5: …
6:
7: #endif
來包含整個Header的所有程式碼,來告訴編譯器如果已經Include該Header,就不要在編譯期間再重複參照了
例如有個part_file.h的標頭
1: #ifndef PART_FILE_H
2:
3: #define PART_FILE_H
4:
5:
6:
7: struct fileSturct
8:
9: {
10:
11: char *noode;
12: int;
13:
14: }
15:
16:
17:
18: void create_File();
19:
20:
21:
22: #endif
23:
或者可以用#pragma once,不過這非ISO C的編譯flag
會不具備可攜性就是了~~~
所以以後就養成Header檔裡面記得順手補上這三行
避免以後別人接你的程式的時候造成困擾阿~~~
以上
thx for:
ccckmit.wikidot.com/cp:includeguard+&cd=1&hl=zh-TW&ct=clnk&gl=tw