C被认为弱类型?为什么?
我一直认为C是那里最强类型的语言之一.
因此,我很震惊地看到 Table 3 of this paper表示C是弱键入的. 显然,
类型铸造的存在是否重要?这种演员的明确性是否无关紧要? 更一般地说,C是否真的被普遍认为是弱类型?为什么? 解决方法
该文件首先声称:
然后声称:
这似乎与我相矛盾.在C和C中,由于强制转换而导致的类型混淆不会无声地发生 – 有一个演员!这并没有证明这些语言中的任何一种都是弱类型的,至少不是那篇论文中的定义. 也就是说,根据论文中的定义,C和C仍然可以被认为是弱类型的.正如已经在该问题的评论中所指出的那样,语言支持隐式类型转换.许多类型可以隐式转换为bool,int类型的文字零可以静默转换为任何指针类型,不同大小的整数之间有转换等,所以这似乎是考虑C和C弱类型的一个很好的理由为了本文的目的. 对于C(但不是C),还有更危险的隐式转换值得一提: int main() { int i = 0; void *v = &i; char *c = v; return *c; } 出于本文的目的,必须将其视为弱类型.对位的重新解释是静默发生的,并且可以通过修改它以使用完全不相关的类型来做得更糟,这些类型具有静默的未定义行为,通常具有与重新解释位相同的效果,但在启用优化时以神秘但有时有趣的方式爆炸. 但总的来说,我认为没有“强类型”和“弱类型”的固定定义.有各种等级,与装配相比,强类型的语言与Pascal相比可能是弱类型的.要确定C或C是否是弱类型,首先要问你想要弱类型的意思. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |