众所周知,VLA(在C99中标准化)不是C ++中标准的一部分。
因此,下面的代码在C ++中是“非法的”:
void foo(int n) {
int vla[n];
for (int i = 0; i < n; ++i) {
vla[i] = i;
}
}
尽管编译器(g ++和clang ++)将代码作为有效语法接受,但如果启用了flag,则仅生成警告 。-pedantic
ISO C ++禁止使用可变长度数组'vla'[-Wvla]
我的问题是:
为什么编译器接受该声明?
编译器不能只拒绝长度为[is-no-know-at-compile-time]?的数组?
是否要遵循某种兼容语法规则?
标准怎么说?
从生成的汇编代码中,我看到编译器像正常数组一样在循环中写在堆栈中,但是我找不到关于标准行为的任何信息。
心有法竹
胡子哥哥
森栏
相关分类