C89 中的变长数组?

发布于 2024-10-01 16:30:33 字数 364 浏览 14 评论 0原文

我读过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

十年九夏 2024-10-08 16:30:33

GCC 始终支持可变长度数组 AFAIK。将 -std 设置为 C89 不会关闭 GCC 扩展...

编辑:事实上,如果您检查此处:

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

在 -std= 下您将找到以下内容:

ISO C90 程序(某些 GNU
与 ISO C90 冲突的扩展
被禁用)。与 C 的 -ansi 相同
代码。

注意“一定”这个词。

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".

只涨不跌 2024-10-08 16:30:33

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 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

淡淡绿茶香 2024-10-08 16:30:33

您错过了如果没有 -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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文