通用元件‎ > ‎

平台選擇

張貼者:2012年3月26日 下午6:24Cxxlman Cxxlman   [ 已更新 2012年4月3日 晚上8:48 ]
若要寫跨平台的程式,首先要使用各平台都有提供的程式庫,編寫各平台都可執行的程式碼,其次就得依平台的不同編寫適用的程式碼。 這個機制採用引入檔 SYSSELEC.HPP 作為控管,可依平台的不同選擇適合的程式碼編譯,只要引入 SYSSELEC.HPP,再依如下的方式使用即可:

#if (SysSelect == _WIN32_CxxlMan)

// 程式碼

#endif

 

SYSSELEC.HPP 會依不同平台把代表編號指定給 SysSelect 符號常數,目前提供的代表編號有以下:

#define _WIN32_CxxlMan 1 // WIN32 平台 #define _LINUX_CxxlMan 2 // linux 平台 #define _MAC_CxxlMan 3 // MAC 平台

SYSSELEC.HPP 如何判斷所處平台呢?主要依靠編譯器提供的平台符號識別字:

__WIN32__ Win32 平台的須提供此符號識別字
__linux__ linux 平台的須提供此符號識別字

一般來說編譯器都會自動提供符合所處平台的符號識別字,若編譯器沒有提供正確的平台符號識別字,SYSSELEC.HPP 會阻止繼續編譯並顯示錯誤訊息,這時須自行加上,如:

gcc -D__linux__  foo.cpp -o foo

 

另外提供以下三個適合各平台的呼叫慣例: 

cxxlCDECL 函數的參數自右向左推入堆疊,函數結束後由呼叫端負責清除參數佔用的堆疊,對於參數個數不定的函數須用此呼叫慣例
cxxlSTDCALL 函數的參數自右向左推入堆疊,由被呼叫的函數負責清除參數佔用的堆疊
cxxlFASTCALL 前兩個參數由 CPU 的暫存器傳入,剩下的參數自右向左推入堆疊,由被叫的函數負責清除參數佔用的堆疊
 
 
 

 
引入檔

SYSSELEC.HPP

 

程式庫

 

 
 
Comments