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? :-)
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:
Pay close attention to the word "certain".
C89 does not recognize
//
comments.C89 does not allow definitions intermixed with code.
You need to
fflush(stdout)
after theprintf
to be sure of seing the prompt before thescanf
.main
"looks better" asint main(void)
Try
gcc -std=c89 -pedantic ...
insteadYou'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.