我读过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
它有效......
我错过了什么? : - )
答案 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方言,其中包括各种扩展。