[英]Variable-length arrays in C89?
我已经读过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
有用...
我错过了什么? :-)
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相同。
密切注意“确定”一词。
C89无法识别//
评论。
C89不允许与代码混合的定义。
你需要在printf
之后fflush(stdout)
以确保在scanf
之前设置提示。
main
“看起来更好”作为int main(void)
试试gcc -std=c89 -pedantic ...
而不是
你错过了没有-pedantic
,gcc不是(并且不声称是)符合标准的C编译器。 相反,它编译了一个C语言的GNU方言,其中包括各种扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.