[C 隨手記]_使用Include Guard來避免重複Include標頭檔

[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