为什么clang抱怨使用带有'-std = c99'标志的可变长度数组?

问题描述 投票:2回答:1

当我编译此实验代码时:

int main(void)
{
    int foo = 5;
    char bar[foo];
}

带有clang和-Weverything或分别与-Wvla标志结合的单独的-std=c99标志,我仍然收到警告:

警告:使用了可变长度数组[-Wvla]

Example here

尽管与以后的C标准(C11,C18等)相比,符合C99的实现应-在VLA支持是可选的情况下,毫无例外地支持可变长度数组。


  • 为什么我仍然在使用带有'-std=c99'标志的VLA时收到此警告?
  • 这是一个错误还是只是为了提示您注意遵守符合更高C标准(以及C89 / C90)的实现?
c compiler-construction clang c99 compiler-flags
1个回答
0
投票

您是正确的,符合C99的实现必须支持VLA,而实现可以符合更高版本的C标准而不支持VLA。但我认为您正在为树木错过森林。我认为上述标准之间的差异恰恰是警告的重点。这并不是说您正在构建的代码可能会中断。而是警告您,您所依赖的功能不是通用的前向兼容,因此,如果您尝试在其他地方构建代码,则它可能会中断。

© www.soinside.com 2019 - 2024. All rights reserved.