在 的情况下long double x = 8.99999999999999999,该值将存储为,double因为未附加“L”。x当我已经将变量声明为long doublefloat 类型时,为什么 C 编译器不能进行类型推断?
小智 5
在 20 世纪 70 年代初,当 C 语言首次开发时,运行编译器的计算机速度很慢,内存也很少。因此,需要设计语言,使编译器能够简单,使编译能够快速。一个简单的编译器需要程序员告诉它一切,因为每次编译器需要推导时,它都会使用CPU和内存。
另一个我认为同样重要的原因是,开发和使用 C 的人们最初是用它编写一个操作系统,他们想要一种不试图变得聪明的语言。编写操作系统已经够棘手的了,无需猜测编译器可能会做什么或不会做什么:他们需要非常精确地控制发生的事情,从这个意义上说,更简单的语言对操作系统编写者来说是一个很大的好处。
由于这些原因,C 最终失去了许多在后几十年设计的、针对应用程序编程的高级语言现在拥有的功能。它没有面向对象,没有类型推断,没有垃圾收集,没有异常,也不支持线程。
未来 C 可能会被改变以拥有这样的东西(事实上,最新的 C 标准现在已经有了本地线程,但我相信它们是可选的),但总的来说,如果你想要这些东西,你想要一个不同的语言。实际上有数千种有趣的语言可供选择。