C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么C编译器不能做类型推断?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果long double x = 8.99999999999999999,则该值将存储为double,因为未附加“L”.当我已经将变量x声明为long double float类型时,为什么C编译器不能进行类型推断?

解决方法

C编译器不进行类型推断,因为C不是类型安全的.你可以很容易地把事情变成无效,无效指针,然后再回来.这不符合规则.这至少意味着对C的任何类型的推断都只是近似的,并且最多你会让编译器为你提供关于你的类型出了什么问题的线索.

至于为什么C不进行类型推断:C中的类型不是为了强制逻辑关系,也不是用语言编码真值.在某种程度上,具有声音类型系统的语言(@L_874_1@,OCaml,SML,Coq等……)意味着类型告诉你一些东西:有一个定理你可以从类型中记下你的程序. (参见Philip Wadler的“免费定理!”作为一个有趣的例子!)

那么为什么C使用类型呢?原因很简单,编译器需要知道 – 在某种程度上 – 如何组织存储在内存中的数据.而不是逻辑一致性,C中的类型可以告诉你如何布局,我应该把这个int放在一个结构中等等……

相反,C有许多习惯用法来模仿类型安全语言中的更多标准功能.例如,void指针通常用于表示参数多态. (例如,你可以有一个列表,其中可以包含指向任何数据类型的指针.)事实上,它做了更多的事情,在C中你可以编码指向不同数据类型的列表.在传统的函数式语言中,列表的归纳类型要求所有元素都属于同一类型,您可以在C中轻松编码不合格类型和行(例如,在C中,通过使用标识符标记列表元素来完成).

有C的类型和内存安全方言,以@L_696_10@为例,在某些地方,多态性确实取代了像void指针这样的事情,同时仍然给你很多C语言的细节.

@H_301_23@

大佬总结

以上是大佬教程为你收集整理的为什么C编译器不能做类型推断?全部内容,希望文章能够帮你解决为什么C编译器不能做类型推断?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。