C89中的可变长度数组?

时间:2010-11-11 22:09:30

标签: c arrays gcc c99 c89

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

#include <stdio.h>

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

当我这样编译时(假设文件名为va_test.c):

gcc va_test.c -std=c89 -o va_test

它有效......

我错过了什么? : - )

3 个答案:

答案 0 :(得分:10)

GCC始终支持可变长度阵列AFAIK。将-std设置为C89不会关闭GCC扩展...

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

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

在-std =下你会找到以下内容:

  

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

密切注意“确定”一词。

答案 1 :(得分:7)

C89无法识别//条评论。

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

您需要在fflush(stdout)之后printf确保在scanf之前查看提示。

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

尝试使用gcc -std=c89 -pedantic ...

答案 2 :(得分:2)

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