我是C的新手,我正在经历一本C书,它说
const int i[] = { 1,2,3,4 }; float f[i[3]]; // Illegal
它说在编译期间float变量的声明是无效的.为什么?
假设我们使用
int i = 3; float f[i];
有用.
第一种情况有什么问题?
谢谢.
解决方法
所以第一个是非法的,因为一个数组必须有一个编译时已知的绑定,而我[3]严格来说在编译时已经知道,不符合“编译时已知”的语言设置条件.
同样的原因,第二个也是非法的.
然而,这两种情况通常都将被GCC接受,因为它支持C99型运行时大小的数组作为C中的扩展.把这个国旗交给海湾合作委员会,让它抱怨.
编辑:C标准术语是“积分常数表达式”,符合条件的资料在本标准的第5.19节中有详细描述.确切的规则是不平凡的,C11具有更广泛的范围,因为constexpr有资格,但在C98中,法律事务列表大致如下: