当前位置:  开发笔记 > 前端 > 正文

为什么在声明可变大小的C数组时,我没有收到编译错误?

如何解决《为什么在声明可变大小的C数组时,我没有收到编译错误?》经验,为你挑选了1个好方法。

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

但是,我注意到如果我没有显式初始化数组,我没有得到任何错误(是的,它不会在堆栈上,但我想知道缺少错误).例如,由于array2,以下代码无法编译:

#define N 30

void defineArrays(int n)
{
    int i,j;
    int array1[N] = {};

    int array2[n] = {};

    for(i=0; i

但是下面的代码编译并运行,即使我从main发送一个真正的n:

#define N 30

void defineArrays(int n)
{
    int i,j;
    int array1[N] = {};

    int array2[n];

    for(i=0; i

我在这里缺少什么?它是否将array2声明为指针?我正在使用gcc

更新:感谢所有回答的人.问题确实是我的gcc版本由于一些奇怪的原因而默认为C99(或者不是那么奇怪,也许我只是太老了),我错误地认为它默认为C90,除非我另有说明.



1> JaredPar..:

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

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有