[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

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料