Variable-length arrays in C89?

冷暖自知 提交于 2019-12-18 05:47:11

问题


I've read that C89 does not support variable-length arrays, but the following experiment seems to disprove that:

#include <stdio.h>

int main()
{
   int x;
   printf("Enter a number: ");
   scanf("%d", &x);
   int a[x];
   a[0] = 1;
   // ...
   return 0;
}

When I compile as such (assuming filename is va_test.c):

gcc va_test.c -std=c89 -o va_test

It works...

What am I missing? :-)


回答1:


GCC always supported variable length arrays AFAIK. Setting -std to C89 doesn't turn off GCC extensions ...

Edit: In fact if you check here:

http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

Under -std= you will find the following:

ISO C90 programs (certain GNU extensions that conflict with ISO C90 are disabled). Same as -ansi for C code.

Pay close attention to the word "certain".




回答2:


C89 does not recognize // comments.

C89 does not allow definitions intermixed with code.

You need to fflush(stdout) after the printf to be sure of seing the prompt before the scanf.

main "looks better" as int main(void)

Try gcc -std=c89 -pedantic ... instead




回答3:


You're missing that without -pedantic, gcc isn't (and doesn't claim to be) a standard-conforming C compiler. Instead, it compiles a GNU dialect of C, which includes various extensions.



来源:https://stackoverflow.com/questions/4159746/variable-length-arrays-in-c89

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!