#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的编译器说了两件事:
答案 0 :(得分:1)
因为我无法初始化类型为arr [x]的数组,其中x是变量?
实际上,在C99之前,数组大小必须是常量表达式。在C99中,使用可变长度数组放宽了这一点。
(这与宏无关。)
数组初始值设定项中的多余元素 - 这是什么意思?
解决第一个问题,这应该会消失。
答案 1 :(得分:1)
示例中的数组大小由N
指定,它不是常量。这意味着您的数组是VLA(可变长度数组)。 C语言不允许在VLA声明中使用初始化器。
为了编译它,N
必须让我成为常量(因为M
和L
是常量,N
也可以是常量)。使用N
或枚举成员声明#define
。
答案 2 :(得分:0)
如果我没记错的话,
char s [N]={'1','2'};
N需要是常数