我正在研究一個代碼庫,我們有幾個可配置的類型。其中一種類型是64位整數。當我們編譯爲沒有原生64位整數類型的平臺,我們簡單表示使用類似的結構體64個整數結構之間的鑄造?
typedef struct {
unsigned int hi, lo;
} int64;
爲了使這種類型的有用的,所有常見的操作被定義爲函數,如
int64 int64_add(int64 x, int64 y);
在平臺上,其中一個原生的64位整數類型,那麼,這些操作簡單的樣子
#define int64_add(x, y) ((x) + (y))
反正上的問題。我在執行關於時間的一些功能,我想使用64位整數來表示我的時間:
typedef int64 mytime;
我也希望所有可供的Int64類型的一般性操作可用於我的時間類型以及:
#define mytime_add(x, y) (mytime) int64_add((int64) (x), (int64) (y))
這個問題是,類型mytime和int64之間的轉換不允許在C中(據我所知可以)。有沒有辦法做到這一點,而不必重新實現mytime類型的所有add,sub,mul,div等功能?
一個選項當然是永遠不會執行mytime typedef,並且只需要在任何需要表示時間的地方使用int64。這個問題是我不確定我是否總是想把時間表示爲64位整數。然後是可讀的代碼問題,以及... :-)
沒有幫助,因爲如果編譯器支持64位類型,int64_t將僅存在於此處。 – 2008-11-07 13:59:32