相关疑难解决方法(0)

在C89中是否有任何成熟/标准化的方法来使用固定宽度的整数?

一些背景:

标题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)

c bit-manipulation c89 ansi-c

6
推荐指数
1
解决办法
227
查看次数

32位或64位平台上的sizeof(int)= 1吗?

在该部分中N3797::3.9.1/2 [basic.fundamental]有:

有五种标准的有符号整数类型:" signed char"," short int"," int"," long int"和" long long int".在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间.

标准明确定义了大小char, unsigned char, signed char为1.并且普通ints 的大小取决于INT_MIN并且INT_MAX据我所知,并非标准化.所以有可能是实现定义INT_MININT_MAX这样sizeof(int) = 1;

c++

1
推荐指数
1
解决办法
141
查看次数

标签 统计

ansi-c ×1

bit-manipulation ×1

c ×1

c++ ×1

c89 ×1