【发布时间】:2020-09-01 15:47:59
【问题描述】:
当我编译这个实验代码时:
int main(void)
{
int foo = 5;
char bar[foo];
}
使用 clang 和 '-Weverything' 或单独的 '-Wvla' 标志与 '-std=c99' 标志相结合,
我仍然收到警告:
警告:使用了可变长度数组 [-Wvla]
虽然符合 C99 的实现,但与后来的 C 标准(C11、C18 等)相比,VLA 支持是可选的,但无一例外地支持可变长度数组。
- 为什么在 clang 中使用带有
'-std=c99'标志的 VLA 时仍会收到此警告? - 这是一个错误,还是只是为了提示注意遵守后续 C 标准(以及 C89/C90)的实现?
【问题讨论】:
-
对于那些可能不知道的人,您可以通过以下方式关闭此警告:
-Wno-vla。 -
gcc 在 C99 / C11 模式下不会抱怨。听起来像一个错误。
-
@FiddlingBits 是的,我知道。不过非常感谢。
-
-Weverything 旨在成为 clang 的内部测试工具;不仅仅是一个更好的“-Wall”; llvm 建议不要使用它。 (lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20181203/…)
-
符合标准的编译器可以警告任何他们喜欢的东西。另请参阅多字符常量(如
'ABCD')和三元组。
标签: c clang c99 compiler-flags