C89中的可变长度数组?

jas*_*ogd 9 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;
}
Run Code Online (Sandbox Code Playgroud)

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

gcc va_test.c -std=c89 -o va_test
Run Code Online (Sandbox Code Playgroud)

有用...

我错过了什么?:-)

Goz*_*Goz 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相同.

密切注意"确定"一词.

  • 这个页面有这个确切的例子来解释:http://www.network-theory.co.uk/docs/gccintro/gccintro_28.html (3认同)

pmg*_*pmg 7

C89无法识别//评论.

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

你需要fflush(stdout)printf确定之前看到提示scanf.

main "看起来更好" int main(void)

尝试gcc -std=c89 -pedantic ...代替

  • :) ...让我想起了我在工程学校的前几个月。那时,我们必须编写符合 c89 标准的代码。1 个带有 `-ansi - 迂腐` 的警告,你得到 0 ... 美好的过去 ... (2认同)