#if 翻譯公司 #ifdef 翻譯公司 #ifndef 常常在 C 語言或是C++程式裡看到 翻譯公司 不過就是單純讓 compiler 去辨識哪一段程式要, 哪一段程式不要嘛.
最常見 翻譯用法是
#ifdef ABC
...meow...
#else /* ABC */
...bark...
#endif /* ABC */
如果之前 compiler 曾經遇到 #define ABC 翻譯話 翻譯公司 那compiler會去讀meow那段code, 如果沒有 翻譯公司 則是讀bark那段, 當然, 每個compiler都會有自定的macro來辨識compiler本身名稱版本啦, OS種類版本啦 翻譯公司 還是函式庫版本等等.
在上個範例裡, 最重要 翻譯反而是後面的 /* ABC */ 了, 因為沒有它其實沒什麼大不了的, 可是人在看 翻譯時候, 沒有它, 到時一堆#endif跟#else雜在一起, 不會廢掉也會傻掉. 養成註解的好習慣還是很重要呢!
回到標題的主題, #ifndef 跟header file有什麼關係, 常看一些compiler的標準header file的人就知道, 它們的header file的頭尾都會像如下
#ifndef __HEADER_H__
#define __HEADER_H__
...content...
#endif /* __HEADER_H__ */
這個是為了怕重覆 include 翻譯狀況發生, 假如 a.h 裡 include 了 b.h 而 c.c 這個檔裡 include a.h 跟 b.h, 如果沒有#ifndef 來攔住, 跟一個#define來標示出已經include 過了, 那麼content裡面的東西都會重複定義喔, 重複定義當然沒什麼大不了 翻譯, 可是compiler很笨, 它只分得出來重複定義, 分不出來值都是一樣的 翻譯公司 所以只好這樣子讓compiler以資辨別囉.
再回到 /* ... */ 的問題, 其實 /* */ 很討厭說, 往往想暫時不要一段如下 翻譯程式碼:
bark(); /* just bark you. */
meow(); /* just meow him. */
改成醬子看看...
/*
bark(); /* just bark you. */
meow(); /* just meow him. */
*/
這樣子compiler一定不會理你的 翻譯公司 還會有error唷! 這時 #if 就有用了, 來吧! 改成
#if 0
bark(); /* just bark you. */
meow(); /* just meow you. */
#endif /* 0 */
嘿嘿 翻譯公司 就沒事囉. 什麼原因啊? /* 會去找下一個 */ 來結束 翻譯公司 而還沒 /* 的 */ 都會被視成是有問題的 翻譯公司 回頭看看前前一段code有沒有問題吧. :)
。-> 翻譯社|,-> 翻譯公司|的-> 翻譯
最常見 翻譯用法是
#ifdef ABC
...meow...
#else /* ABC */
...bark...
#endif /* ABC */
如果之前 compiler 曾經遇到 #define ABC 翻譯話 翻譯公司 那compiler會去讀meow那段code, 如果沒有 翻譯公司 則是讀bark那段, 當然, 每個compiler都會有自定的macro來辨識compiler本身名稱版本啦, OS種類版本啦 翻譯公司 還是函式庫版本等等.
在上個範例裡, 最重要 翻譯反而是後面的 /* ABC */ 了, 因為沒有它其實沒什麼大不了的, 可是人在看 翻譯時候, 沒有它, 到時一堆#endif跟#else雜在一起, 不會廢掉也會傻掉. 養成註解的好習慣還是很重要呢!
回到標題的主題, #ifndef 跟header file有什麼關係, 常看一些compiler的標準header file的人就知道, 它們的header file的頭尾都會像如下
#ifndef __HEADER_H__
#define __HEADER_H__
...content...
#endif /* __HEADER_H__ */
這個是為了怕重覆 include 翻譯狀況發生, 假如 a.h 裡 include 了 b.h 而 c.c 這個檔裡 include a.h 跟 b.h, 如果沒有#ifndef 來攔住, 跟一個#define來標示出已經include 過了, 那麼content裡面的東西都會重複定義喔, 重複定義當然沒什麼大不了 翻譯, 可是compiler很笨, 它只分得出來重複定義, 分不出來值都是一樣的 翻譯公司 所以只好這樣子讓compiler以資辨別囉.
再回到 /* ... */ 的問題, 其實 /* */ 很討厭說, 往往想暫時不要一段如下 翻譯程式碼:
bark(); /* just bark you. */
meow(); /* just meow him. */
改成醬子看看...
/*
bark(); /* just bark you. */
meow(); /* just meow him. */
*/
這樣子compiler一定不會理你的 翻譯公司 還會有error唷! 這時 #if 就有用了, 來吧! 改成
#if 0
bark(); /* just bark you. */
meow(); /* just meow you. */
#endif /* 0 */
嘿嘿 翻譯公司 就沒事囉. 什麼原因啊? /* 會去找下一個 */ 來結束 翻譯公司 而還沒 /* 的 */ 都會被視成是有問題的 翻譯公司 回頭看看前前一段code有沒有問題吧. :)
來自: http://mypaper.pchome.com.tw/joshuaprog/post/173590有關翻譯的問題歡迎諮詢天成翻譯社
文章標籤
全站熱搜
