c中定义全局变量,用此变量定义数组长度问题,为什么编译器报错

#include
int =5;
struct data
{
int f[n];
int mid;
int h;
}x.y;
哪里不对
编译器说expected constant experssion

数组的长度必须是常量!不能是变量,不管是全局的还是局部的都不行。要用符号来表示数组的长度,请用宏定义#define 。比如:

 #include
#define N 5
struct data
{
int f[N];
int mid;
int h;
}x,y;

如果要动态声明数组,则要用到malloc函数动态分配空间。比如:

 #include<stdlib.h>
#include<stdio.h>
int main()
{
    int *A;//指向数组首地址的指针
    int n;//数组的长度
    scanf("%d", &n);//输入数组的长度

    A = (int*)malloc(n*sizeof(int));//动态生成一个n个元素的数组A[n]

    for (int i = 0;i < n;i++)
    {
        A[i] = i;//初始化数组
    }
}

不是所有的编译器都支持 int f[n];
但是gcc新版本的确可以这么写,不能说这么写就是错的。

所以你可能看见有的书上或者网站上这么写,而你的编译器不支持而已。