2012-04-15 53 views
4

我正在寫一個程序以每32位(即一次4個字節)爲單位將數據存儲到文件。我在64位Windows系統中編寫代碼,但我使用的編譯器是32位(mingw32)。在目前的系統中,長整數的大小是相同的,32位(4字節)。我目前通過使用g ++重新編譯將代碼移植到其他系統(無需更改代碼)。但是,我發現int或long的大小是不同的,取決於系統。是否有任何方式(如在頭文件中使用宏)來確定整數的大小,以決定是否應該使用int或long作爲代碼中的數據類型?我必須在4種不同類型的系統中重新編譯代碼,如果我修改代碼以使每個系統有4個不同的副本,那真是令人頭疼。動態確定基於系統的整數類型(C++)

回答

10

你想要做的是使用像int32_t這樣的標準類型。這種類型總是32位。我目前在便攜式數據庫(berkeley db)中使用這些類型以實現跨系統兼容性。

查看here所有這些。

包含stdint.h以獲取這些定義。

+0

非常感謝定義。我認爲這就是我期待的:) – user1285419 2012-04-15 20:15:09

2

您可以使用sizeof(int)來確定整數的大小。

如果你需要一個特定的大小,你應該使用int32_t(或的int64_t)從stdint.h

3

這是由C99提供了典型的解決方案的共同問題。

The <stdint.h> header定義了一組提供特定大小,最快大小和最小大小的整數的類型。在解決您的問題時非常有用。

這是你使用mingw32的一件好事,因爲不幸的是,最後一次我檢查了微軟沒有提供stdint.h與他們的API。如果有人確實需要這種針對Windows,有一個開源版本,請參見:http://code.google.com/p/msinttypes/

0

IMO的問題,最好的辦法是不使用intlong long等,而是獨立於平臺的類型別名:int8_tint16_tint32_tint64_t

他們在<stdint.h>