【发布时间】:2009-03-30 19:46:01
【问题描述】:
我的理解一直是,当我在堆栈上声明一个大小作为变量或参数传入的数组时,我应该得到一个错误。
但是,我注意到如果我没有显式初始化数组,我不会收到任何错误(是的,它不会在堆栈上,但我想知道是否没有错误)。 例如下面的代码因为array2没有编译:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n] = {};
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
但即使我从 main 发送一个真正的 n,以下代码也会编译并运行:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n];
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
我在这里缺少什么?是否将array2 声明为指针? 我正在使用 gcc
更新:感谢所有回答的人。问题确实是我的 gcc 版本出于某种奇怪的原因默认为 C99(或者不是那么奇怪,也许我太老了),并且我错误地认为它默认为 C90,除非我另有说明。
【问题讨论】: