請問一個問題 |
尚未結案
|
processior
一般會員 發表:18 回覆:9 積分:10 註冊:2003-08-24 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
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 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
引言: 非常謝謝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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |