gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:21:15 24 4
gpt4 key购买 nike

当我编译这个实验代码时:

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

与 clang 和 '-Weverything'或单独的 '-Wvla'标志结合 '-std=c99'旗帜,
我仍然收到警告:

warning: variable length array used [-Wvla]



Example here

尽管与后来的 C 标准(C11、C18 等)相比,符合 C99 的实现将无一异常(exception)地支持可变长度数组,其中 VLA 支持是可选的。

  • 为什么我在使用带有 '-std=c99' 的 VLA 时仍会收到此警告旗帜在 clang ?
  • 这是一个错误还是只是为了提示注意遵守符合后来的 C 标准(以及 C89/C90)的实现?
  • 最佳答案

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

    如果 Clang 认为 VLA 是 C99 的非标准扩展,那么它根本不应该接受您在 -std=c99 中使用 VLA 的代码。模式。

    关于c - 为什么 clang 提示使用带有 '-std=c99' 标志的可变长度数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61825661/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com