全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:709
推到 Plurk!
推到 Facebook!

請問一個問題

尚未結案
processior
一般會員


發表:18
回覆:9
積分:10
註冊:2003-08-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-08 10:40:01 IP:139.223.xxx.xxx 未訂閱
if (ucLogicalPage >= _MAX_PAGE_) { #ifdef _WIN32 printf("Wrong Logical Page = %d!\n", ucLogicalPage); #endif tdWriteReg(0xff, ucLogicalPage); return; } #ifdef #endif 這兩個指令代表什麼意識
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-08 15:50:20 IP:211.76.xxx.xxx 未訂閱
processior 您好:    是C/C++編譯指令的一部分,目的是在編譯期間,選擇要真正進行編譯的程式碼。 以底下程式為例,在呼叫compiler時,假設MSVC與BCB的做法是不同的,但是程式的其他部分是一樣的。這時雖然可以各為MSVC與BCB寫一個程式,但似乎不是個好主意,因為有可能拿錯程式了。所以藉由編譯指令的幫忙,我們只要寫一個程式,加上一些編譯判斷,當把程式拿到別人或客戶的電腦上時,再根據當時的編譯器,簡單修改重新編譯連結,即可在該電腦上執行。 或者,利用來做一些版本與環境平台等的判定,以便使用最合適的程式碼,就如同您所提供的例子。 供您參考。    #ifdef XXX  =>如果之前有定義XXX,從此以下到對應 #endif 的程式碼將會被編譯。    #endif =>上述 #ifdef 到此結束    

//---------------------------------------------------------------------------    #define MSVC    #ifdef MSVC
  void compiler()
  { ShowMessage("MSVC environment!");
  }
#else   // BCB case
  void compiler()
  { ShowMessage("BCB environment!");
  }
#endif    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  compiler();
}
//---------------------------------------------------------------------------
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
processior
一般會員


發表:18
回覆:9
積分:10
註冊:2003-08-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-09 10:25:37 IP:139.223.xxx.xxx 未訂閱
非常謝謝RICHTOP大哥的解釋但是我還有一個小疑問想請教你 你所謂的之前我們會定義好是要給VC用或者BCB用那些定義是放在檔案的最上頭嗎?還是我們看程式時要怎樣分辨這一段是要給BCB或者VC用
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-09 11:43:25 IP:140.129.xxx.xxx 未訂閱
引言: 非常謝謝RICHTOP大哥的解釋但是我還有一個小疑問想請教你 你所謂的之前我們會定義好是要給VC用或者BCB用那些定義是放在檔案的最上頭嗎?還是我們看程式時要怎樣分辨這一段是要給BCB或者VC用 其實條件編譯就是能提供任何程式段的編譯選擇,不一定要在檔案的最上頭。 以前在DOS下有個例子是:(詳細內容不精確記得,下述舉例僅供參考) 在MSVC畫點:_PutPixel(x, y, color); 在TC20畫點:PutPixel(x, y, color); // Turbo C 2.0 兩者的差別,僅在前方的底線。 一種方法是透過編譯指令來完成不同版本的指令轉換,這樣就可以只針對TC20寫程式,再輔以條件編譯做進階的調整:

#define MSVC  // define it for MSVC, or remark it for TC20
......
#ifdef MSVC
 #define PutPixel(x,y,color) _PutPixel(x,y,color)
#endif 
以MSVC與TC20為例,僅為說明方便,其實各種可能使用是存在的。如何因地制宜,就需要您的巧思了。 < face="Verdana, Arial, Helvetica"> RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/11/09 11:54:16
系統時間:2024-11-22 13:15:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!