討論區快速選單
知識庫快速選單
討論區最近新進100則主題 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
#ifdef 和 #ifndef 的差別
更改我的閱讀文章字型大小
作者 : kcc0800(無知的小新人)
[ 貼文 7 | 人氣 57 | 評價 10 | 評價/貼文 1.43 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/17 下午 06:11:11
關於下列前置處理器,我只知道前面1~4點的意思,5、6點不太懂,不知有人是否可以解釋一下,
如果能舉例說明就更好了,謝謝。
1.#if (和平常的if功能一樣)
2.#endif (結束if的範圍)
3.#else (和平常的else功能一樣)
4.#elif (如同else if)
5.#ifdef
6.#ifndef
作者 : larrynung(蹂躪) VB.Net卓越專家C#卓越專家貼文超過500則人氣指數超過10000點
[ 貼文 890 | 人氣 14899 | 評價 4320 | 評價/貼文 4.85 | 送出評價 11 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/17 下午 06:31:57
#ifdef
前置處理器有定義

#ifndef
前置處理器沒有定義

==============================
#define _Debug 0

#ifdef _Debug
#define Moad "Debug Mode"
#endif

#ifndef _Debug
#define Moad "Release Mode"
#endif
作者 : kcc0800(無知的小新人)
[ 貼文 7 | 人氣 57 | 評價 10 | 評價/貼文 1.43 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/17 下午 06:44:27
>1.#if (和平常的if功能一樣)
>2.#endif (結束if的範圍)
>3.#else (和平常的else功能一樣)
>4.#elif (如同else if)
>5.#ifdef
>6.#ifndef

不好意思...經過剛剛的努力爬文和看書後,我終於看懂了。
原本想把這篇給移除,不過找不到移除的地方,想說或許還有人不懂,所以就自己來解答....
要講第5、6點前,必須先介紹另外兩個前置處理器 #define #undef
#define 大家應該都知道它是用來定義的,而
#undef 是用來消除定義
例如:
#define TURBOC
 
int main()
{
  #ifdef TURBOC (因為上頭有定義TURBOC所以此條件成立)
    printf("Borland C compiler.\n");
  #endif (結束#ifdef)
 
  #undef TURBOC (消除TURBOC定義)
 
  #ifndef TURBOC (因為TURBOC沒被定義所以此條件成立)
    printf("MircoSoft C compiler.\n");
  #endif (結束#ifdef)
}

執行結果 :
Borland C compiler.
MircoSoft C compiler.
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/17 下午 07:51:47
#ifndef
  #define fgfhggfjhgjh 0x6476467
   #define yityiryiri 0x457645765
#else
     #if cc==1
     #elif dd ==2
     #undef yityiryiri
     #else
     #ifdef cc
     #undef cc
     #
     #
     #endif
     #endif
#endif
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/17 下午 09:33:40
補充一下:

  #ifdef XXX
等於
  #if defined(XXX)

  #if defined XXX


  #ifndef XXX
等於
  #if !defined(XXX)

  #if !defined XXX


程式員可以很好的利用這個特性. 比方說, header guard 或比較固定的定義如 _DEBUG 用 #ifdef. 程式本身所使用的定義用 #if defined. 這樣, 在搜尋原始碼的時候可能會方便些.

作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/18 下午 01:24:18
這些 前置處理器, 認識它們必須的, 但是, 初學者最好不要使用它們, 因為 C++ 本身的句法結構已經足夠去滿足一般的管理需求.

或是說, 前置處理器 的好處就是它們的靈活性, 但是, 它靈活的原因, 是因為它架構鬆散, 對程式開發和維護的影響難以預計. 就算是經驗老到的編程人員, 使用它們時都是戰戰兢兢的.
作者 : kcc0800(無知的小新人)
[ 貼文 7 | 人氣 57 | 評價 10 | 評價/貼文 1.43 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/2/18 下午 03:09:24
謝謝大家的回答和補充

>這些 前置處理器, 認識它們必須的, 但是, 初學者最好不要使用它們, 因為 C++ 本身的句法結構已經足夠去滿足一般的管理需求.
>
>或是說, 前置處理器 的好處就是它們的靈活性, 但是, 它靈活的原因, 是因為它架構鬆散, 對程式開發和維護的影響難以預計. 就算是經驗老到的編程人員, 使用它們時都是戰戰兢兢的.

恩恩
我是因為看了一些從網路上download下來的程式碼
裡面有寫,所以才來找找資料
謝謝你的教導
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.1719971