我的理解一直是当我在堆栈上声明一个大小作为变量或参数出现的数组时,我应该得到一个错误.
但是,我注意到如果我没有显式初始化数组,我没有得到任何错误(是的,它不会在堆栈上,但我想知道缺少错误).例如,由于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;
}
Run Code Online (Sandbox Code Playgroud)
但是下面的代码编译并运行,即使我从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;
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?它是否将array2声明为指针?我正在使用gcc
更新:感谢所有回答的人.问题确实是我的gcc版本由于一些奇怪的原因而默认为C99(或者不是那么奇怪,也许我只是太老了),我错误地认为它默认为C90,除非我另有说明.
Jar*_*Par 14
C99引入了具有可变长度阵列的能力,现在可以在GCC中使用(尽管据报道它不完全符合标准).在第二个示例中,您似乎正在利用该功能.
链接到GCC关于可变长度数组的信息:http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
| 归档时间: |
|
| 查看次数: |
3046 次 |
| 最近记录: |