インクルードファイルを介して利用できるCoが本当にない場合UINT_MAX
は、少なくとも次のことを判断できますUINTMAX_MAX
。
typedef unsigned long long uintmax_t;
typedef signed long long intmax_t;
// start testing with the smaller values
#if -1U == 4294967295U
# define UINTMAX_MAX 4294967295
#elif -1U == 18446744073709551615U
...
#endif
プリプロセッサは、と同じ幅で計算しuintmax_t
ます。したがって、少なくともアーキテクチャのその部分を知っているはずです。
他のことについては、小さなインクルードファイルを作成するテストコードを記述します。
printf("#define CHAR_IS_SIGNED %d\n", ((char)-1 < 0));
printf("#define UCHAR_MAX %hhu\n", (unsigned char)-1);
printf("#define USHRT_MAX %hu\n", (unsigned short)-1);
printf("#define UINT_MAX %u\n", (unsigned)-1);
printf("#define ULONG_MAX %lu\n", (unsigned long)-1);
printf("#define ULLONG_MAX %llu\n", (unsigned long long)-1);
typedef
妥当な仮定(2の補数、パディングビットなし)の下で、符号付きタイプの値を推測することができ、タイプに対して正しいことを行うこともできuintXX_t
ます。