错误:可变大小的对象可以不被初始化(Error: Variable-sized object may

2019-09-19 19:00发布

#define L 1
#define M L+1

int main(void){

    int N=L*M*2;
    char s [N]={'1','2'};
    printf("%d", sizeof(s));

    return 1;   
}

为什么上面的代码不能编译? Eclipse的编译器说两件事情:

  1. 可变大小的对象可能不被初始化:是因为N个用M或定义和L在宏观是因为我不能初始化类型 ARR数组[x]其中x是在任何情况下变量?
  2. 在数组初始化多余的元素 -这是什么意思?

Answer 1:

因为我不能初始化型ARR [x]其中x是变量数组?

事实上,预C99,阵列的大小必须是常量表达式 。 在C99中,这已被放宽具有可变长度阵列

(这是无关的宏。)

在阵列initializer-多余的元素是什么意思?

解决第一个问题,这应该消失。



Answer 2:

在您的示例的阵列大小是由指定N ,这不是一个常数。 这意味着您的阵列是VLA(可变长度数组)。 C语言不允许在VLA声明初始化。

为了使该编译, N已给我制作成一个常数(因为ML是常数, N也可以是恒定的)。 任一声明N使用#define或作为枚举成员。



Answer 3:

如果我没有记错,

char s [N]={'1','2'};

n - 必须是恒定的



文章来源: Error: Variable-sized object may not be initialized
标签: c arrays macros