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

dan*_*jar 6 c++ theory compiler-construction interpreter interpreted-language

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

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

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

Rei*_*ica 4

这取决于“逐条陈述”的含义。大多数时候,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();
}
Run Code Online (Sandbox Code Playgroud)

或者

#include <iostream>

inline void foo();

int main()
{
  foo();
}

inline void foo()
{
  std::cout << "x\n";
}
Run Code Online (Sandbox Code Playgroud)

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

extern int i;

int main()
{
  return i;
}

int i = 0;
Run Code Online (Sandbox Code Playgroud)

  • `goto` 也违反了从上到下的执行规则。它的标签可以出现在当前函数体的任何地方。 (2认同)