当我编译此实验代码时:
int main(void)
{
int foo = 5;
char bar[foo];
}
带有clang和-Weverything
或分别与-Wvla
标志结合的单独的-std=c99
标志,我仍然收到警告:
警告:使用了可变长度数组[-Wvla]
尽管与以后的C标准(C11,C18等)相比,符合C99的实现应-在VLA支持是可选的情况下,毫无例外地支持可变长度数组。
'-std=c99'
标志的VLA时收到此警告?您是正确的,符合C99的实现必须支持VLA,而实现可以符合更高版本的C标准而不支持VLA。但我认为您正在为树木错过森林。我认为上述标准之间的差异恰恰是警告的重点。这并不是说您正在构建的代码可能会中断。而是警告您,您所依赖的功能不是通用的前向兼容,因此,如果您尝试在其他地方构建代码,则它可能会中断。