Когда вы делаете
#define _XOPEN_SOURCE <some number>
или
cc -D_XOPEN_SOURCE=<some number>
, он говорит вашему компилятору включить определения некоторых дополнительных функций, которые определены в стандартах X / Open и POSIX.
Это даст вам некоторые дополнительные функции, которые существуют в большинстве последних систем UNIX / BSD / Linux, но, вероятно, не существуют в других системах, таких как Windows.
Цифры относятся к разным версиямстандарт.
Вы можете определить, какой из них вам нужен (если есть), просмотрев страницу man для каждой функцииВы звоните.
Например, man strdup
говорит:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Это означает, что вы должны поставить один из них:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
в верхней части вашегоисходный файл перед выполнением любых #include
с, если вы хотите использовать strdup
.
, или вы можете поместить
#define _GNU_SOURCE
тудаобъявление, которое включает все функции, но с недостатком, которое может не скомпилироваться в Solaris, FreeBSD, Mac OS X и т. д.
Рекомендуется проверить каждую страницу man перед выполнением #include
, #define
или с использованием новой функции, потому что иногда их поведение меняется в зависимости от того, какие опции и #define
s у вас есть, например, с basename (3) .
См. также: