【问题标题】:Variably modified 'variable_name' at file scope error?在文件范围错误中可变修改“variable_name”?
【发布时间】:2013-02-02 06:20:03
【问题描述】:

C 新手。编译时出现以下错误:

error: variably modified 'header' at file scope
error: variably modified 'sequence' at file scope

代码:

struct list{
  char header[list_header_size];
  char sequence[list_sequence_size];
  struct list *next;
};

我认为这个错误意味着编译器需要从一开始就知道这些变量是什么。因此,我将调用结构体的 main() 移到了程序的末尾。我还尝试在程序开始时声明变量,但我不确定我是否正确地这样做了。我试过char header;char header[];

【问题讨论】:

    标签: c struct compiler-errors


    【解决方案1】:

    你说得对,编译器需要知道结构成员的类型。它需要知道类型的一个原因是它可以计算大小。但是,在您的情况下,它无法知道大小,因为在您的结构中,您已经定义了两个不是恒定大小的数组。因此,编译器不知道结构的总大小,这违背了了解类型的目的。

    最接近您想要的是将两个char 数组替换为两个char 指针并动态分配它们将指向的内存。

    【讨论】:

    • “计算大小”缺少有趣的一点:在 C 中,数组类型是类型,而类型的一部分是大小。
    • 好吧,我做到了。现在我收到一个奇怪的错误:在 '=' token `int list_header_size = 200; int list_sequence_size = 2000; struct list{ char header = (char) malloc(sizeof(list_header_size)); char sequence = (char) malloc(sizeof(list_sequence_size));结构列表*下一个; }; `
    • @user1472747 请发布您修改后的代码,以便我们查看问题所在。
    • 我正在尝试......但我无法弄清楚如何在评论中格式化代码。我会在主帖中发布。
    • 哦,哇。您不应该在结构中设置字段,是吗...我是个白痴>。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多