Kiedy to zrobisz
#define _XOPEN_SOURCE <some number>
lub
cc -D_XOPEN_SOURCE=<some number>
mówi kompilatorowi, aby załączył definicje niektórych dodatkowych funkcji, które są zdefiniowane w standardach X / Open i POSIX.
Zapewni to dodatkowe funkcje, które istnieją w najnowszych systemach UNIX / BSD / Linux, ale prawdopodobnie nie istnieją w innych systemach, takich jak Windows.
Numery odnoszą się do różnych wersji normy.
Możesz określić, którego potrzebujesz (jeśli w ogóle), patrząc na stronę podręcznika dla każdej wywoływanej funkcji.
Na przykład man strdup
mówi:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Co oznacza, że powinieneś umieścić jeden z tych:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
na górze pliku źródłowego przed wykonaniem jakichkolwiek czynności, #include
jeśli chcesz użyć strdup
.
Albo możesz położyć
#define _GNU_SOURCE
zamiast tego, co zapewnia wszystkie funkcje, z wadą polegającą na tym, że może nie kompilować się na Solarisie, FreeBSD, Mac OS X itp.
Dobrym pomysłem jest sprawdzenie każdej strony podręcznika przed wykonaniem a #include
, #define
lub użyciem nowej funkcji, ponieważ czasami ich zachowanie zmienia się w zależności od #define
posiadanych opcji i opcji , na przykład basename (3) .
Zobacz też: