【问题标题】:error : variably modified 'd' at file scope错误:在文件范围内可变地修改了“d”
【发布时间】:2014-03-07 12:21:07
【问题描述】:

代码 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 运行良好?

【问题讨论】:

    标签: c arrays struct compiler-errors


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在代码 2 中,您的结构数组位于定义的数据段中

      数据段是程序虚拟地址空间的一部分, 其中包含全局变量和静态变量 由程序员初始化。 此段的大小已确定 由程序员在程序运行之前放置在那里的值 编译或组装,并且在运行时不会更改

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-02
          • 2013-12-16
          • 2019-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-15
          相关资源
          最近更新 更多