16 ビット長でなければならない変数があります。プラットフォーム上で独立して正確に 16 ビットになるように定義するにはどうすればよいですか?
と定義できますshort
が、プラットフォームによっては 16 ビット以上になる場合があります。
<stdint.h>
とint16_t
が利用できない場合、回避策はビットフィールドである可能性があります。ビットフィールドは構造体または共用体の内部でのみ有効であるため、1 つにラップする必要があります。
#include <stdio.h>
struct auw {
int sixteen :16;
};
int main(void)
{
struct auw one = {16*1024 }, two, result;
two = one; /* assigmment is easy*/
/* but addition is a bit more painful */
result.sixteen = one.sixteen + two.sixteen -1;
printf("Result=%d\n", (int) result.sixteen );
return 0;
}
ポータブルな符号なし 16 ビット整数が必要な場合は、 と を使用uint16_t
し、符号付き 16 ビット整数の場合は を使用しますint16_t
。
inttypes.h
とstdint.h
は両方とも で紹介されていC99
ます。を使用している場合はC89
、独自の型を定義する必要があります。