C++也可以解释而不是编译

Could C++ also be interpreted instead of compiled?

本文关键字:编译 也可以 解释 C++      更新时间:2023-10-16

我知道解释C++代码可能没有实际价值,这个问题只是为了娱乐和学习目的。

是否可以逐条语句解释C++代码语句而不是编译它?还请解释答案的原因。

如果不可能,是否有可以解释的语言子集?

这取决于

你所说的"逐句陈述"是什么意思。大多数时候,C++是一种严格的自上而下的语言:如果你想使用任何东西,你必须事先声明或定义它。所以这里没有问题。

但是,自上而下的方法也有例外。例如,类成员函数的主体看到类数据成员的声明,这些声明在源代码中以词法方式跟随它。可以调用已声明但尚未在翻译单元中定义的inline函数(不过,定义必须在 TU 结束之前出现)。

这些可能会也可能不会违反您的"逐个陈述"的概念,这取决于该概念到底是什么。

根据您的评论进行编辑

如果解释器对当前语句没有展望,那么它就不可能希望解释C++代码。使用上面给出的问题点的反例:

#include <iostream>
struct C
{
  void foo() { std::cout << i << 'n'; }
  int i;
};
int main()
{
  C c;
  c.i = 0;
  c.foo();
}

#include <iostream>
inline void foo();
int main()
{
  foo();
}
inline void foo()
{
  std::cout << "xn";
}

它甚至不必涉及内联函数:

extern int i;
int main()
{
  return i;
}
int i = 0;

编译和解释之间没有明确的界限。通常被认为是解释的大多数语言实际上是为某种 VM 编译的。C++也可以这样做。

相关文章: