错误:在文件范围内修改了'd'

时间:2014-02-10 08:56:21

标签: c arrays struct compiler-errors

代码1: -

int size;

struct demo
{
    int a;
};

int main()
{
    scanf("%d",&size);
    struct demo d[size];
    return 0;
}

此代码工作正常。

代码2: -

int size;

struct demo
{
    int a;
};

int main()
{
    scanf("%d",&size);
    return 0;
}

struct demo d[size];

此代码显示错误: -

error : variably modified 'd' at file scope

为什么会出现Code 2这样的错误,而Code 1运行正常?

3 个答案:

答案 0 :(得分:3)

在代码2中,您的结构数组驻留在数据段中,根据定义

  

数据段是程序虚拟地址空间的一部分,   其中包含全局变量和静态变量   由程序员初始化。 确定此细分受众群的规模   通过程序员在程序之前放置的值   编译或汇编,并且在运行时不会改变

答案 1 :(得分:2)

因为第二个例子中的d数组是全局的,所以它不能是一个可变长度数组;那些直到运行时才得到它们的实际大小,这对于全局来说是不可能的。编译器必须能够在可执行文件中为全局数据分配空间,如果大小未知,则无法进行。

答案 2 :(得分:2)

在函数内声明的变量是堆栈变量,它们在调用函数时分配。另一方面,全局变量是在任何函数执行之前分配的堆变量。这就是为什么在第二个代码中,不可能为数组d分配内存。