报错: error: variably modified ‘a’ at file scope的原因

问题代码:

#include "stdio.h"

int n=10,a[n];
int main(void)
{

    return 0;
}

报错: error: variably modified ‘a’ at file scope
但如果把int n=10,a[n];写到main里面是可以编译运行的,想知道为什么。

#include "stdio.h"

int main(void)
{
    int n=10,a[n];
    return 0;
}

这样是可以的。

数组不能定义在方法外面。

参考博客:大数组才需要定义全局变量(在main的外面),小的应该不需要,你看看这篇博客,应该就懂了

003 大数组为什么要定义在主函数外?在主函数内为什么不可以?_定义大数组_小曾爱吃榴莲的博客-CSDN博客 大数组要定义在函数外的原因如下:定义在main函数外就是定义全局变量。在所有子程序(包括main函数)中定义的变量为局部变量。全局变量在静态存储区内分配内存,而局部变量在栈内分配内存空间。一般堆很大,比如内存1G,堆也可以大到1G。C语言编写的程序会在运行期间创建一个堆栈段,用来保存函数的调用关系和局部变量,而在main函数内部定义大数组相当与在栈内需要一个很大的空间,会造成栈的溢出。因此,当我们需要定义一个极大的数组时,最好在main函数外部定义。实例如下:035:Pell数列描述Pell_定义大数组 https://blog.csdn.net/qq_42180695/article/details/122907777

根据参考链接的解释,变长数组必须是在代码块内的局部变量。

参考链接:


C/C++是否支持动态数组(VLA)_c vla_小景-SCUT的博客-CSDN博客 一、先说结论:1.1.支不支持看哪个语言版本,C99和C++11及其之后的版本都是支持的。C99之前不支持。2.2.但是,C99和C++11即便是支持,VLA也必须是局部变量,不能是全局变量二、解释2.1 针对1.1的解释:直接上代码:不管是C++11还是C99,下面这么写都可以运行。#include#includevoid VLA(int len){ int f[len]; printf("VLA is _c vla https://blog.csdn.net/weixin_39954922/article/details/115129955