繁体   English   中英

C89中的可变长度数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM