为什么K&R不能更好地定义数据类型长度?

时间:2018-10-26 17:13:34

标签: c types language-history

我遇到的每种现代编程语言都具有定义明确的数据类型。例如,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)文章的以下建议:

  

如果您键入charintshortlongunsigned   进入新代码,就错了。

     

对于现代程序,您应该#include <stdint.h>然后使用标准   类型。

     

有关更多详细信息,请参见stdint.h规范。

     

常见的标准类型为:

     
      
  • int8_tint16_tint32_tint64_t —有符号整数
  •   
  • uint8_tuint16_tuint32_tuint64_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循环中的控制变量。

我的问题有两个:

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

2。在2018年,我们应该应该处理我们的数据类型选择吗?还是仅仅是样式和约定并广受好评?

0 个答案:

没有答案