C89 中的变长数组?
我读过 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
它有效...
什么我失踪了吗? :-)
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? :-)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
GCC 始终支持可变长度数组 AFAIK。将 -std 设置为 C89 不会关闭 GCC 扩展...
编辑:事实上,如果您检查此处:
http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
在 -std= 下您将找到以下内容:
注意“一定”这个词。
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 不识别
//
注释。C89 不允许定义与代码混合。
您需要在
printf
之后执行fflush(stdout)
,以确保在scanf
之前看到提示。main
“看起来更好”为int main(void)
尝试使用
gcc -std=c89 -pedantic ...
代替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 ...
instead您错过了如果没有
-pedantic
,gcc 就不是(也没有声称是)符合标准的 C 编译器。相反,它编译了 C 的 GNU 方言,其中包括各种扩展。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.