如果数组声明,编译器和解释器如何工作

时间:2013-08-12 14:46:30

标签: c++ arrays compiler-construction interpreter

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

就像下面的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];

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

1 个答案:

答案 0 :(得分:2)

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

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

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

但你的说法是:

  

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

也是错误的,C,一种编译语言,支持可变长度数组。