MAP_ANONYMOUS со стандартом C99 - PullRequest
19 голосов
/ 27 марта 2011

У меня есть приложение, использующее системный вызов mmap, у меня возникла проблема с тем, чтобы оно часами компилировалось, глядя на то, почему я получаю MAP_ANON и MAP_ANONYMOUS были необъявленными, у меня был меньший фрагмент кода, который я использовал, и я Я видел, что я могу скомпилировать его очень хорошо, поэтому я попробовал просто базовую компиляцию, и это сработало, я увидел, что она не работает, когда вы добавляете -std = c99. Есть ли конкретная причина, по которой MAP_ANON и MAP_ANONYMOUS недопустимы в стандарте C99? Я знаю, что они не определены в POSIX, но определены в BSD SOURCE, поэтому я просто хочу знать, почему это так.

1 Ответ

22 голосов
/ 27 марта 2011

Вы, вероятно, хотите -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
...