运行时解释器真的是 C 程序执行的一部分吗?

Is runtime interpreter really part of C program execution?

本文关键字:一部分 执行 程序 解释器 真的 运行时      更新时间:2023-10-16

我们知道C是一种编译语言。根据C语言维基百科,它说:

它被设计为使用相对简单的编译器进行编译,提供对内存的低级访问,提供有效映射到机器指令的语言结构,并需要最少的运行时支持。它还说,通过设计,C提供了有效地映射到典型机器指令的结构,因此它已经在以前用汇编语言编码的应用程序中得到了持久的使用,包括操作系统,以及从超级计算机到嵌入式系统的各种计算机应用软件。

但是当我读到这篇文章时,根据布鲁斯·埃克尔(Bruce Eckel(的《C++2中的思考》,它在题为Iostreams的第2章中说:(我省略了一些部分(

最大的绊脚石是用于 变量参数列表函数。这是解析的代码 运行时的格式字符串,并从中获取和解释参数 变量参数列表。这是一个问题,原因有四。

因为解释发生在运行时,所以有一个性能 您无法摆脱的开销。这令人沮丧,因为所有的 编译时格式字符串中存在信息,但它是 直到运行时才进行评估。但是,如果您可以解析参数 在编译时的格式字符串中,您可以制作硬函数 有可能比运行时快得多的调用 解释器(尽管 printf( ( 系列函数通常是 相当优化(。

此链接还说:

  • 更类型安全:使用 ,被 I/O 的对象类型为 编译器静态已知。相比之下,cstdio 使用 "%" 字段以动态确定类型。

所以在阅读本文之前,我认为解释器不像 C 那样用于编译语言,但是运行时解释器在执行 C 程序期间也确实可用吗?在读这篇文章之前我错了吗?与 Iostreams 相比,这种运行时解释真的会产生如此多的开销吗?

什么?

这不是代码的运行时解释,只是使用格式化字符串的函数内部。

当然,他们必须遍历格式字符串以了解参数和所需的格式,这需要时间。