【问题标题】:how compiler and interpreter work in case of array declaration在数组声明的情况下编译器和解释器如何工作
【发布时间】:2013-08-12 14:46:30
【问题描述】:

最近我在某处读到,如果在运行时给出了数组维度,那么这样的程序可以被解释但不能被编译。

就像下面的 C++ 代码一样

int m;
cin >> m;
int a[m];

我使用 turbo C++ 编译它,它给我一个错误,即数组声明需要一个常量表达式。(预期)

但在 Java 的情况下

int m;
Scanner input = new Scanner(System.in);
m = input.nextInt();
int[] a = new int[m];

它没有给出任何错误。 (我猜是因为它被解释为未编译)
但为什么会有这种差异?

【问题讨论】:

  • A. Java是一种编译语言。 B. 此验证针对每个编译器实现。
  • 我的问题不是关于 java 或 c++,而是关于这样的程序如何无法编译但可以解释,其中数组维度在运行时声明。

标签: c++ arrays compiler-construction interpreter


【解决方案1】:

首先,C++ 和 Java 都是编译语言。而且 C++ 也支持你在 Java 中所做的(动态分配):

int m;
cin >> m;
int *a = new int[m];

您的 C++ 代码的问题是数组必须具有在编译时确定的常量大小。

但你的说法:

在运行时给出一个数组维度,这样的程序可以解释但不能编译。

也不对,编译语言C支持变长数组。

【讨论】:

  • 你应该提到你需要在某个时候删除数组。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2019-02-09
  • 1970-01-01
  • 2014-09-11
相关资源
最近更新 更多