Wenn Sie das tun
#define _XOPEN_SOURCE <some number>
oder
cc -D_XOPEN_SOURCE=<some number>
Es weist Ihren Compiler an, Definitionen für einige zusätzliche Funktionen aufzunehmen, die in den X / Open- und POSIX-Standards definiert sind.
Auf diese Weise erhalten Sie einige zusätzliche Funktionen, die auf den neuesten UNIX / BSD / Linux-Systemen vorhanden sind, auf anderen Systemen wie Windows jedoch wahrscheinlich nicht.
Die Zahlen beziehen sich auf verschiedene Versionen des Standards.
Sie können feststellen, welche Sie benötigen (falls vorhanden), indem Sie sich die Manpage für jede von Ihnen aufgerufene Funktion ansehen.
Zum Beispiel man strdup
sagt:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Was bedeutet, dass Sie eine dieser setzen sollten:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
oben in Ihrer Quelldatei, bevor #include
Sie s ausführen, wenn Sie verwenden möchten strdup
.
Oder du könntest sagen
#define _GNU_SOURCE
Dort wird stattdessen alle Funktionalität aktiviert, mit dem Nachteil, dass es unter Solaris, FreeBSD, Mac OS X usw. möglicherweise nicht kompiliert werden kann.
Es ist eine gute Idee , jeden Mann Seite zu überprüfen , bevor ein tun #include
, #define
oder eine neue Funktion, denn manchmal ihr Verhalten auf , welche Optionen in Abhängigkeit davon ändert und #define
s Sie haben zum Beispiel mit Basisnamen (3) .
Siehe auch: