一些背景:
标题stdint.h 是自C99以来C标准的一部分.它包括typedef,确保为8,16,32和64位长整数,包括有符号和无符号.但是,此标头不是C89标准的一部分,我还没有找到任何直接的方法来确保我的数据类型具有已知长度.
了解实际主题
下面的代码是SQLite(用C89编写)如何定义64位整数,但我觉得它并不令人信服.也就是说,我认为它无处不在.最糟糕的是,它可能会无声地失败:
/*
** CAPI3REF: 64-Bit Integer Types
** KEYWORDS: sqlite_int64 sqlite_uint64
**
** Because there is no cross-platform way to specify 64-bit integer types
** SQLite includes typedefs for 64-bit signed and unsigned integers.
*/
#ifdef SQLITE_INT64_TYPE
typedef SQLITE_INT64_TYPE sqlite_int64;
typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
#elif defined(_MSC_VER) || defined(__BORLANDC__)
typedef __int64 sqlite_int64;
typedef unsigned __int64 sqlite_uint64;
#else
typedef long long int sqlite_int64;
typedef unsigned long long int sqlite_uint64;
#endif
typedef sqlite_int64 sqlite3_int64; …Run Code Online (Sandbox Code Playgroud) 在该部分中N3797::3.9.1/2 [basic.fundamental]有:
有五种标准的有符号整数类型:"
signed char","shortint","int","long int"和"long long int".在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间.
标准明确定义了大小char, unsigned char, signed char为1.并且普通ints 的大小取决于INT_MIN并且INT_MAX据我所知,并非标准化.所以有可能是实现定义INT_MIN和INT_MAX这样sizeof(int) = 1;?