我知道解释 C++ 代码可能没有实际价值,这个问题只是为了娱乐和学习目的。
是否可以逐句解释 C++ 代码而不是编译它?还请说明答案的原因。
如果不可能,是否有可以解释的语言子集?
我知道解释 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 << "x\n";
}
它甚至不必涉及内联函数:
extern int i;
int main()
{
return i;
}
int i = 0;
编译和解释之间没有明确的界限。大多数通常被认为是解释型的语言实际上是为某种 VM 编译的。C++ 也可以这样做。