4

ほとんどのプログラマーは、移植性を確保するために typedef を使用していると読みました。

たとえば、次のように書きます。

typedef int int16_t

typedef unsigned int uint16_t

int16_t が int と同じである限り (唯一の変更は名前です)、移植性はどこにあるのでしょうか?! int を直接使用してはいけないのはなぜですか?!

別の質問: 異なるマイクロコントローラーでは、int のサイズは一定ではありません。たとえば、AVR 32int のサイズ = 4 バイトですが、AVR 8-bitint のサイズ = 2 バイトです。

それは何に依存し、マイクロコントローラの変更でなぜ変わるのか?!

4

3 に答える 3

3

型のサイズはintC によって正確に指定されていません。少なくとも 16 ビットに等しいと想定されています。そのため、一部のプロセッサ アーキテクチャでは、コンパイラは 16 ビットとして実装しますが、他のプロセッサでは 32 ビットとして実装します。したがって、プログラマーがint a.

これを避けるために、型は、uint_16またはuint_32いくつかのグローバル ヘッダー ファイル (たとえば、types.h) のような名前を使用して定義されます。types.h 内では、ユーザー定義の型が適切なネイティブ型に正しくマップされます。また、例を考慮して、types.heg にプロセッサ固有の定義がある場合があります。

#ifdef AVR_32
typedef unsigned int  uint_32
#else
typedef unsigned long uint_32  
#endif

後で、プログラマーはこれらの型 (uint_16、uint_32 など) を使用し、自分でサイズを気にすることはありません。

于 2013-10-21T16:44:11.950 に答える