gpt4 book ai didi

c - 为什么在声明可变大小的 C 数组时没有出现编译错误?

转载 作者:太空狗 更新时间:2023-10-29 17:15:46 24 4
gpt4 key购买 nike

我的理解一直是,当我在堆栈上声明一个大小为变量或参数的数组时,我应该得到一个错误。

但是,我注意到如果我没有显式初始化数组,我不会收到任何错误(是的,它不会在堆栈上,但我想知道没有错误)。例如,以下代码由于 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,除非我另有说明。

最佳答案

C99 引入了可变长度数组的能力,现在 GCC 中也可以使用(尽管据报道它并不完全符合标准)。在第二个示例中,您似乎正在利用该功能。

链接到 GCC 关于可变长度数组的信息:http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

关于c - 为什么在声明可变大小的 C 数组时没有出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/698739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com