2011-01-06 13 views
1

は、コンパイラはstdint.hが見つから傾けることを私に伝えていること、です。次のようにそのため、 は、私はそれらのデータ型を再定義:データ型の質問

unsigned int WORD; 
unsigned long DWORD; 

をこれが私のために簡単な宣言だが、それが必要としてプログラムが期待されていません。多分私は何かを見逃しましたか? 1999:

おかげ

答えて

1

<stdint.h>と種類uint32_tuint64_tは、ISO/IEC 9899に "新" です。あなたのコンパイラは、以前のバージョンの標準にしか準拠していないかもしれません。

unsigned intunsigned longがそれぞれ32ビットと64ビットであることが確かであれば、少なくともtypedef自体に起因する問題はないはずです。あなたがそうであるように、これはそうでないかもしれません。あなたのコンパイラがunsigned long longをサポートしているかどうか知っていますか?

unsigned intはおそらく32ビットですか、あなたのSPARCは何歳ですか?

0

コンパイラ/ OSに<stdint.h>がない場合は、移植しようとしているコードを変更するのではなく、このヘッダーの独自のバージョンを実装することをお勧めします。おそらく、通常<stdint.h>で定義されているタイプのサブセットのみが必要です。

// 
// stdint.h 
// 

typedef int int32_t; // signed 32 bit int 
typedef unsigned long long uint64_t; // unsigned 64 bit int 

(これを正しく行うには、特定のプラットフォーム上のさまざまな整数型のサイズを知る必要があります)。

0

したがって、32ビットの整数と64ビットの整数が必要です。

あなたのアーキテクチャでintとlongsが同じで、コンパイラがlong longをサポートしていれば、それは64ビットかもしれませんが、intは32ビットかもしれません。コンパイラのドキュメントで何がサポートされているか、そして拡張子があるかどうかを確認してください(たとえば、いくつかのコンパイラが__int64型を提供するかもしれません)。これは何が必要かもしれない:

typedef unsigned int WORD; 
    typedef unsigned long long DWORD; 

とにかくあなたが正しいものを選ぶことができますので、私は、はsizeof(int型)のprintfされ、ホスト上の整数の大きさを確認するための小さなプログラムを書くと思いますsizeof(long)などです。 (それはすべて、少なくともmultple 8のビットですので、SPARCホストCHAR_BITでは、8となります。)

また、あなたがSPARCホストへの移植しているので、あなたのコードがどこかendianess

に関するめちゃくちゃされていないことを確認してください