我正在读一本书,说在C ++中你不能这样做:
int array_size = 3;
int array[array_size];
然后我用gcc尝试了它,但它根本没有抱怨(异常警告未使用的array
)。
我还读到了this question。第四个答案说你可以使用这样的东西:char someCondition[ condition ];
对我来说,condition
只有在运行时才能知道,所以整个事情似乎真的让我感到困惑。任何人都可以帮忙解释一下吗?
感谢,G
答案 0 :(得分:7)
如果您使用的是C ++编译器,那么它可以正常工作,因为大多数C ++编译器都提供了支持 Variable Length arguments(VLA) 的编译器扩展。
如果您使用的是C编译器,那么它可以工作,因为标准允许它。
在C ++中,C ++标准不允许使用VLA,因此通过编译器扩展对它的任何使用都会使您的代码无法移植。 C ++提供 std::vector 或 std :: array (C ++ 11),它们使用可变长度数组或c样式数组resp满足所有要求,你应该使用它们。
请注意,自C99标准以来,C中允许使用VLA。