如果表达式的类型是变长数组类型,则会评估表达式并计算它在运行时的数组大小。
这意味着:如果expression的类型是VLA类型,则将对其进行评估。例如:
#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
。
请参见Wandbox演示版本。
a[i++]
不是VLA类型的表达式,它最终是下标表达式,并且具有类型为int
。除此之外,即使是对于VLA,a[0]
也违反了约束条件。 - StoryTeller - Unslander Monica