另一个混淆与"解释"的概念有关。请参阅

时间:2012-07-29 09:16:50

标签: c++ compilation interpreter

我将通过使用下面的例子来说明我的疑问。

考虑下面写的C ++代码:

#include<iostream.h>

void main()
{
 cout<<"LULZ \n";
 cout<<"\n Enter anything\n";
 int a;
 cin>>a;

 goto noexistence; 

}

现在,我的问题是,如果编译了这段代码,那么最终用户的输出将如何不同,然后在不同情况下解释?当我们编译它时,它会给出编译时错误并且会抱怨没有这样的标签存在(不存在)。

但解释这段代码会发生什么?我不知道C / C ++是否有解释器(我听说过CERN的CINT ROOT,但我不知道如何操作它)但理论上讲,解释如何解释这个标签不是这样的谬论定义

我问的是这个问题,因为我在解释中读了很多次,“代码是逐行执行的”。我永远无法理解“逐行”的概念。任何人都可以对此有所了解,因为这个问题现在正在吃我。

2 个答案:

答案 0 :(得分:3)

解释器读取输入代码并在执行前快速解析它。

有时,解析只是将行读入链表。如果这是解析器实现的所有解析,那么它将开始扫描goto标签的所有输入行,并将打印错误,表示找不到标签。

更智能的解释器可以在执行已执行的行时创建跳转表。在这种情况下,可以在此表中搜索标签(用于向后引用),也可以在以下行中进行扫描(用于前向引用)。

另一个解释器可以选择解析所有输入中的所有标记,并在运行第一个语句之前创建一个跳转表。这样的解释器只会检查跳转表并打印出错误消息。

所以这完全取决于。但是,编译器会解析并在任何执行尝试之前将输入编译为可执行文件。

答案 1 :(得分:0)

您是否阅读了有关compilersinterpretersbytecodesC++

的内容

C ++标准没有说明如何执行C ++程序。你可以在头脑中(或用铅笔和纸),你可以使用一堆人类奴隶(但这是不道德的),你可以使用魔法来执行C ++程序。大多数人使用编译器和计算机。

您可以拥有C ++的解释器

实际上和历史上,C ++已经从C发展而来,主要(不为人知)假设它可以用真实编译器以某种方式编译为真实硬件。

口译员和编制者不是黑人和白色区别;有中间方式(特别是转换为字节代码或abstract syntax tree,然后解释)。

我当然不会将“解释器”定义为逐行工作的东西。大多数口译员都不这样做。通常至少会读取并解析整个“函数”。