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

#include <stdio.h>

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

有用...

我错过了什么? :-)

===============>>#1 票数:10 已采纳

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

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

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

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

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

密切注意“确定”一词。

===============>>#2 票数:7

C89无法识别//评论。

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

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

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

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

===============>>#3 票数:2

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

  ask by jasonbogd translate from so

未解决问题?本站智能推荐: