我試圖端口一個C程序到具有 以下類型聲明數據類型的問題
#include <stdint.h>
typedef uint32_t WORD ;
typedef uint64_t DWORD ;
麻煩的是SPARC架構,編譯器告訴我,stdint.h不能被發現。因此, 我重新定義數據類型的那些如下:
unsigned int WORD;
unsigned long DWORD;
這似乎對我的簡單聲明,但該程序並不期望,因爲它應該。我可能錯過了什麼?
感謝
我試圖端口一個C程序到具有 以下類型聲明數據類型的問題
#include <stdint.h>
typedef uint32_t WORD ;
typedef uint64_t DWORD ;
麻煩的是SPARC架構,編譯器告訴我,stdint.h不能被發現。因此, 我重新定義數據類型的那些如下:
unsigned int WORD;
unsigned long DWORD;
這似乎對我的簡單聲明,但該程序並不期望,因爲它應該。我可能錯過了什麼?
感謝
<stdint.h>
和類型uint32_t
和uint64_t
是ISO/IEC的 「新」 9899:1999。您的編譯器可能只符合標準的以前版本。
如果您確定unsigned int
和unsigned long
分別是32位和64位,那麼您不應該有任何問題(至少不是由於typedefs本身)。就你而言,情況可能並非如此。你知道嗎(或者你能找到答案),如果你的編譯器支持unsigned long long
?
我猜unsigned int
大概是32位的,多大是你的SPARC?
如果你的編譯器/操作系統沒有<stdint.h>
那麼最好的辦法是實現你自己的這個頭的版本,而不是修改你試圖移植的代碼。您可能只需要通常在<stdint.h>
中定義的類型的子集,例如
//
// stdint.h
//
typedef int int32_t; // signed 32 bit int
typedef unsigned long long uint64_t; // unsigned 64 bit int
(顯然,您需要知道特定平臺上的各種整數類型的大小才能正確執行此操作)。
所以,你需要一個整數,是32位的,另一個是64位。
這可能是int和多頭都在你的架構是相同的,如果你的編譯器支持很長很長,這可能是64位,而INT可能是32位。檢查編譯器文檔是否支持它,以及它是否有擴展名(例如,某些編譯器可能提供__int64類型)。這可能是你所需要的:
typedef unsigned int WORD;
typedef unsigned long long DWORD;
無論如何,我會寫一個小程序來驗證您的主機上整數的大小,這樣你就可以選擇正確的一個,那就是在printf的sizeof(INT) sizeof(長)等等。 (適用於SPARC主機CHAR_BIT將是8,所以它的所有ATLEAST 8的multple位。)
而且,由於你移植到SPARC主機,請確保您的代碼不會搞亂某處關於endianess