Подтвердить что ты не робот

MAP_ANONYMOUS с стандартом C99

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

4b9b3361

Ответ 1

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