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
相关产品推荐
相关产品推荐

