You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言数组初始化:大括号内使用变量是否合法?

这段C语言数组初始化代码的合法性分析

你给出的这段代码:

int a = 1;
int b = 2;
int c = 3;
int array[3] = {a, b, c};

在C99及之后的标准中是合法的,但在C89(ANSI C)标准里不被允许。

原因说明:

  • C89对数组初始化的要求很严格,必须使用常量表达式作为初始化值,而普通变量不属于常量表达式范畴,所以用a、b、c这类变量初始化数组会触发编译错误。
  • C99标准放宽了这一限制,允许用已经定义并赋值的自动变量来初始化数组,你的代码完全符合这个规则。

现在主流编译器(比如GCC、Clang、MSVC)默认都支持C99或更新的标准,直接编译这段代码一般不会有问题。如果遇到报错,大概率是编译器被强制设置为C89模式(比如GCC添加了-std=c89编译选项),改成支持C99及以上的模式就能解决。

内容的提问来源于stack exchange,提问作者chen zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:52:05