引用Wikipedia句话:

两种常用的语言

有更明确的答案吗?

推荐答案

"强类型"和"弱类型"是没有广泛认可的技术含义的术语.含义明确的术语有

  • Dynamically typed表示在运行时将类型附加到值,try 混合不同类型的值可能会导致"运行时类型错误".例如,如果在Scheme中,您试图通过写入(+ 1 #t)将1加到true,这将导致错误.仅当您try 执行有问题的代码时才会遇到错误.

  • 意味着类型在编译时被判断,没有静电类型的程序被编译器拒绝.例如,如果在ML中,您试图通过编写1 + true将1加到true,则程序将被拒绝,并显示一条(可能是隐晦的)错误消息.即使代码可能永远不会执行,您也总是会收到错误.

不同的人喜欢不同的系统,部分取决于他们对灵活性的重视程度和对运行时错误的担忧程度.

有时"强类型"被松散地用来表示"静态类型",而"弱类型"被错误地用来表示"动态类型"."强类型"一词的更好用法是"不能绕过或 destruct 类型系统",而"弱类型"则意味着"类型系统中存在漏洞".相反,大多数使用静态类型系统的语言都有漏洞,而许多使用动态类型系统的语言则没有漏洞.

这些术语都没有以任何方式与一种语言中可用的隐式转换数量相关联.

如果您想准确地谈论编程语言,最好避免使用"强类型"和"弱类型"这两个术语.我想说C是一种静态类型的语言,但是它有很多漏洞.一个漏洞是您可以自由地将任何指针类型转换为任何其他指针类型.您还可以通过声明一个具有两个成员的C联合,在您 Select 的任何两个类型之间创建漏洞,每个成员对应于所讨论的类型.

我已经写了更多关于静电和动态打字的文章.

C++相关问答推荐

如何用C(使用两个s补数算术的32位程序)计算

为什么已经设置的值在C中被重置为for循环条件中的新值?

你能用自己的地址声明一个C指针吗?

来自stdarg.h的c中的va_args无法正常工作<>

为什么在C中二维字符数组会有这样的行为?

我无法让LLDB正确运行我的可执行文件

仅在给定的大小和对齐方式下正确创建全局

模拟shell并运行.sh文件

以下声明和定义之间的区别

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

Tic-tac-toe:从文件加载存储

运行时错误:在索引数组时加载类型为';char';`的空指针

通过对一个大的Malloc内存进行切片来使用Malloc的内存片

C++中PUTS函数的返回值

使用mmap为N整数分配内存

C: NULL>;NULL总是false?

C程序printf在getchar while循环后不工作

clion.我无法理解 Clion 中发生的 scanf 错误

malloc:损坏的顶部大小无法找出问题

nullptr_t 是否会 destruct 类型双关或指针转换?