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

时间:2013-09-06 11:06:20

标签: c++ compiler-construction theory interpreter interpreted-language

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

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

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

2 个答案:

答案 0 :(得分: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();
}

或者

#include <iostream>

inline void foo();

int main()
{
  foo();
}

inline void foo()
{
  std::cout << "x\n";
}

它甚至不需要涉及内联函数:

extern int i;

int main()
{
  return i;
}

int i = 0;

答案 1 :(得分:3)

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