#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的编译器说了两件事:
因为我无法初始化类型为arr [x]的数组,其中x是可变的?
实际上,在C99之前,数组大小必须是一个常量表达式 。 在C99中,使用可变长度数组放宽了这一点。
(这与宏无关。)
数组初始值设定项中的多余元素 – 这是什么意思?
解决第一个问题,这应该消失。
示例中的数组大小由N
指定,该值不是常量。 这意味着您的数组是VLA(可变长度数组)。 C语言不允许VLA声明中的初始化器。
为了编译它, N
必须将我变成一个常数(因为M
和L
是常数, N
也可以是常数)。 使用#define
声明N
或作为枚举成员。
如果我没记错的话,
char s [N]={'1','2'};
N需要是常数
以上就是c/c++开发分享错误:可能无法初始化可变大小的对象相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549881.html