9

我读过 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

有用...

我错过了什么?:-)

4

3 回答 3

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 相同。

密切注意“确定”这个词。

于 2010-11-11T22:10:53.690 回答
9

C89 不识别//注释。

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

您需要在fflush(stdout)之后printf才能确保在 之前看到提示scanf

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

试试gcc -std=c89 -pedantic ...

于 2010-11-11T22:15:55.820 回答
2

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

于 2010-11-11T22:15:08.760 回答