【发布时间】:2018-07-17 13:56:39
【问题描述】:
如果表达式的类型是变长数组类型,表达式 被评估并计算它评估的数组的大小 在运行时。
意思是:如果expression的类型是VLA类型,则expression被求值。例如:
#include <stdio.h>
int main() {
int i = 0;
int a[i];
printf("%zu\n",sizeof(a[i++]));
printf("%d\n",i); // Here, print 0 instead of 1
return 0;
}
所以,根据参考资料,这里的i 变成了1。但是,使用我的 GCC 编译器,i 打印为 0。
【问题讨论】:
-
a[i++]不是 VLA 类型的表达式。它最终是一个下标表达式,类型为int。除此之外,即使是 VLA 的a[0]也是违反约束的。 -
VLA 的长度在定义时确定。在上面的代码中,长度将为 0,因此 VLA 将没有元素。大小在定义后不会改变。此外,长度需要大于零,否则是未定义行为。
-
@byxor - C++ 除了作为编译器扩展之外没有它们(因为编译器也支持 C)。
-
这是关于sizeof+vla的,不是那个问题的重复
标签: c gcc sizeof variable-length-array