0

我遇到的每一种现代编程语言都有明确定义的数据类型。例如,Java 有一个int正好是 32 位的和一个long正好是 64 位的。这不是特定于实现的,而是内置在规范本身中的。另一方面,C具有至少16位的a short、至少16位的anintlong至少32位的a。但是,因为它被定义为至少,它们可能会更大,这会导致严重的可移植性问题。

我一直不明白这一点。我一直把它归结为 1970 年代不同硬件标准的结果,但这对我来说实际上没有意义。即使有很多计算机无法处理 64 位数据类型,这仍然不能成为不将 a 定义short16位和32 位的借口。根据标准,我们已经将 32 位视为任何硬件的最低要求。int

这种标准的扩散导致了以下建议,取自文章How to C(截至 2016 年)

如果您发现自己在新代码中输入charintshort或或longunsigned ,那么您做错了。

对于现代程序,您应该#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操作时,开发人员也经常滥用“<code>byte”的意思。uint8_t用来表示单个无符号字节/八位字节值和uint8_t *表示无符号字节/八位字节值序列要干净得多。

我还注意到有很多建议建议将其size_t用作标准去int替换,就像Jens Gustedt 在 Modern C 中一样,它在本书的第一个示例中使用 asize_t作为for循环中的控制变量。

我的问题有两个:

1、为什么1978年K&R 2没有更明确地定义数据类型?

2. 在 2018 年,我们应该如何处理我们的数据类型选择,还是只是风格和约定以及高度固执己见?

4

0 回答 0