符合 C99 标准的 MAP_ANONYMOUS

发布于 2024-10-27 03:19:35 字数 248 浏览 7 评论 0原文

我有一个使用 mmap 系统调用的应用程序,我在编译它时遇到了几个小时的问题,想知道为什么我得到 MAP_ANON 和 MAP_ANONYMOUS 未声明,我使用了一小部分代码,我看到我可以编译它就好了,所以我尝试了一个基本的编译并且成功了,我发现当你添加 -std=c99 时它失败了。 MAP_ANON 和 MAP_ANONYMOUS 在 C99 标准中无效是否有具体原因?我知道它们不是由 POSIX 定义的,而是由 BSD SOURCE 定义的,所以我只想知道为什么会这样。

I have an application that uses the mmap system call, I was having an issue getting it to compile for hours looking as to why I was getting MAP_ANON and MAP_ANONYMOUS were undeclared, I had a smaller section of code that I used and I saw I could compile it just fine so I tried just a basic compile and that worked, I saw that it fails when you add -std=c99. Is there a specific reason that MAP_ANON and MAP_ANONYMOUS are not valid in the C99 standard? I know that they aren't defined by POSIX but are defined by BSD SOURCE so I just want to know why that is.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

水溶 2024-11-03 03:19:35

您可能需要 -std=gnu99 而不是 -std=c99。 C99 模式明确禁用(大多数)GNU 扩展。

我写了一个简单的测试:

#include <sys/mman.h>

int a = MAP_ANONYMOUS;

在 C99 模式下,它找不到值:

$ gcc -std=c99 -c d.c
d.c:3:9: error: ‘MAP_ANONYMOUS’ undeclared here (not in a function)

而在 Gnu99 模式下,它找到了:

$ gcc -std=gnu99 -c d.c

You probably want -std=gnu99 instead of -std=c99. C99 mode explicitly disables (most) GNU extensions.

I wrote a simple test:

#include <sys/mman.h>

int a = MAP_ANONYMOUS;

In C99 mode, it doesn't find the value:

$ gcc -std=c99 -c d.c
d.c:3:9: error: ‘MAP_ANONYMOUS’ undeclared here (not in a function)

Whereas in Gnu99 mode, it does:

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