我遇到的每种现代编程语言都具有定义明确的数据类型。例如,Java具有正好为32位的int
和正好为64位的long
。这不是特定于实现的,而是内置在规范本身中。另一方面,C具有至少为16位的short
,至少为16位的int
和至少32位的long
。但是,由于至少定义为 ,因此它们可能更大,从而导致严重的可移植性问题。
我从来不了解这一点。我一直将其归因于1970年代不同硬件标准的结果,但这对我而言实际上没有任何意义。即使有许多计算机无法处理64位数据类型,也不能以没有将short
定义为 16位和int
的理由。为必要 32位。从标准中,我们已经将32位作为任何硬件的最低要求。
标准的泛滥导致了来自How to C (as of 2016)文章的以下建议:
如果您键入
char
或int
或short
或long
或unsigned
进入新代码,就错了。对于现代程序,您应该
#include <stdint.h>
然后使用标准 类型。有关更多详细信息,请参见
stdint.h
规范。常见的标准类型为:
int8_t
,int16_t
,int32_t
,int64_t
—有符号整数uint8_t
,uint16_t
,uint32_t
,uint64_t
—无符号整数float
-标准的32位浮点数double
-标准64位浮点请注意,我们不再拥有
char
。 char实际上在C中被错误命名和滥用。开发人员经常滥用
char
来表示“byte
”,即使他们 执行无符号的byte
操作。使用uint8_t
可以更清洁 表示单个无符号字节/八位字节值,而uint8_t *
表示 无符号字节/八位字节值的顺序。
我还注意到了很多建议,建议使用size_t
作为替换int
的标准,就像Modern C by Jens Gustedt中使用size_t
作为本书的第一个示例中的for
循环中的控制变量。