C89中的可变长度数组?

我已经读过C89不支持可变长度数组,但以下实验似乎反驳了:

#include  int main() { int x; printf("Enter a number: "); scanf("%d", &x); int a[x]; a[0] = 1; // ... return 0; } 

当我这样编译时(假设filename是va_test.c ):

 gcc va_test.c -std=c89 -o va_test 

有用…

我错过了什么? 🙂

GCC始终支持可变长度arraysAFAIK。 将-std设置为C89不会关闭GCC扩展…

编辑:事实上,如果你在这里检查:

http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

在-std =下你会发现以下内容:

ISO C90程序(禁用与ISO C90冲突的某些 GNU扩展)。 与C代码的-ansi相同。

密切注意“确定”一词。

C89无法识别//评论。

C89不允许与代码混合的定义。

你需要在printf之后fflush(stdout)以确保在scanf之前发出提示。

main “看起来更好”作为int main(void)

试试gcc -std=c89 -pedantic ...而不是

你错过了没有-pedantic ,gcc不是(并且声称不是)符合标准的C编译器。 相反,它编译了一个C语言的GNU方言,其中包括各种扩展。