MAP_ANONYMOUS符合C99标准

时间:2011-03-27 01:50:55

标签: c posix glibc mmap

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

1 个答案:

答案 0 :(得分:22)

您可能需要-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