加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C被认为弱类型?为什么?

发布时间:2020-12-16 06:53:29 所属栏目:百科 来源:网络整理
导读:我一直认为C是那里最强类型的语言之一. 因此,我很震惊地看到 Table 3 of this paper表示C是弱键入的. 显然, C and C++ are considered weakly typed since,due to type-casting,one can interpret a field of a structure that was an integer as a pointer.
我一直认为C是那里最强类型的语言之一.
因此,我很震惊地看到 Table 3 of this paper表示C是弱键入的.

显然,

C and C++ are considered weakly typed since,due to type-casting,one can interpret a field of a structure that was an integer as a pointer.

类型铸造的存在是否重要?这种演员的明确性是否无关紧要?

更一般地说,C是否真的被普遍认为是弱类型?为什么?

解决方法

该文件首先声称:

In contrast,a language is weakly-typed if type-confusion can occur silently (undetected),and eventually cause errors that are difficult to localize.

然后声称:

Also,C and C++ are considered weakly typed since,one can interpret a field of a structure that was an integer as a pointer.

这似乎与我相矛盾.在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是否是弱类型,首先要问你想要弱类型的意思.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读