可变长度的整数数组

时间:2015-03-12 10:54:55

标签: c

我有一个

int val,i;
scanf("%d",&val);
int a[] = { (val & 0x7) , (val & 0x5) };
for(i=0;i<2;i++)
printf("%d\n",a[i]);

我很困惑上面的代码是否合适? 我在某些编译器上得到了这个错误

expression must have a constant value

但在另一个上这很好用。所以这段代码好吗?

1 个答案:

答案 0 :(得分:4)

在C99之前不允许初始化列表中的变量。

C89:6.5.7:

  

具有静态存储持续时间的对象的初始值设定项中的所有表达式或具有聚合或联合类型的对象的初始化列表中的所有表达式都应为常量表达式。

从C99开始,这是允许的。确保使用-std=c99标志进行编译。