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