...content...
#define __HEADER_H__
#ifndef __HEADER_H__
#ifdef ABC
...meow...
#else /* ABC */
#endif /* ABC */
#endif /* __HEADER_H__ */
回到標題的主題, #ifndef 跟header file有什麼關係, 常看一些compiler的標準header file的人就知道, 它們的header file的頭尾都邑像以下
這個是為了怕重覆 include 的狀態發生, 假如 a.h 裡 include 了 b.h 而 c.c 這個檔裡 include a.h 跟 b.h, 如果沒有#ifndef 來攔住翻譯社 跟一個#define來標示出已經include 過了, 那麼content裡面的器材都邑反複定義喔, 重複定義當然沒什麼大不了的, 可是compiler很笨, 它只分得出來重複定義, 分不出來值都是一樣的翻譯社 所以只好如許子讓compiler以資鑒識囉.
在上個典範裡, 最主要的反而是後面的 /* ABC */ 了, 因為沒有它其實沒什麼大不了的, 可是人在看的時候, 沒有它, 到時一堆#endif跟#else雜在一起, 不會廢掉也會傻掉. 養成註解的好習慣還是很重要呢!
若是之前 compiler 曾碰到 #define ABC 的話翻譯社 那compiler會去讀meow那段code, 若是沒有, 則是讀bark那段, 固然, 每一個compiler城市有自定的macro來辨識compiler自己名稱版本啦, OS種類版本啦, 仍是函式庫版本等等.
...bark...
bark(); /* just bark you. */
meow(); /* just meow him. */
最多見的用法是
再回到 /* ... */ 的問題翻譯社 其實 /* */ 很憎惡說翻譯社 往往想暫時不要一段如下的程式碼:
bark(); /* just bark you. */
#if 0
meow(); /* just meow you. */
這樣子compiler一定不會理
*/
#endif /* 0 */
bark(); /* just bark you. */
/*
嘿嘿翻譯社 就沒事囉. 什麼緣由啊? /* 會去找下一個 */ 來竣事翻譯社 而還沒 /* 的 */ 城市被視成是有問題的翻譯社 回頭看看前前一段code有無問題吧. :)
meow(); /* just meow him. */
改成醬子看看...
本文來自: http://mypaper.pchome.com.tw/joshuaprog/post/173590有關各國語文翻譯公證的問題歡迎諮詢萬國翻譯公司02-23690931