Anwender, die Programme schreiben wollen, die gemäß XPG4-Standard Version 2 portabel sind, müssen das Makro _XOPEN_SOURCE
setzen und ebenfalls das Makro _XOPEN_SOURCE_EXTENDED
auf den Wert 1. Auf diese Weise werden die vom XPG-Standard Version 2 geforderten und ausdrücklich zugelassenen Bezeichner sichtbar gemacht. Diese Makros müssen gesetzt werden, bevor die erste Include-Datei eingebunden wird. Dies kann entweder beim Übersetzungslauf durch Angabe der entsprechenden Compiler-Option erfolgen oder im Quellcode mit Hilfe von #define-Anweisungen.
XPG4 Version 2-definierte Bezeichner sind nur dann nicht definiert, wenn die #undef
-Anweisung angegeben wird (siehe auch Abschnitt "Funktionen und Makros“). Diese #undef
-Anweisungen müssen nach den #include
-Anweisungen aufgerufen werden.
Wenn das Makro _XOPEN_SOURCE
auf 500 gesetzt ist, werden nur die vom XPG4 Version 2-Standard ausdrücklich zugelassenen Bezeichner sichtbar gemacht. Das Makro _XOPEN_SOURCE_EXTENDED
wird in dieser Konstellation ignoriert. Wird das Makro _XOPEN_SOURCE
nicht auf den Wert 500 gesetzt, aber das Makro _XOPEN_SOURCE_EXTENDED
auf 1, so sind nur die im erweiterten XPG4 Version 2-Standard enthaltenen Bezeichner sichtbar.
_XOPEN_SOURCE_EXTENDED
kann beim Übersetzungslauf definiert werden. Um also maximale Portabilität zu unterstützen, sollte in Anwendungen sichergestellt werden, dass _XOPEN_SOURCE_EXTENDED
auf 1 gesetzt ist, indem entweder eine Compileroption benutzt oder eine #define
-Anweisung vor der ersten #include
-Anweisung in den Quellcode eingetragen wird.
Anwendungen, die Funktionalität verwenden, die in diesem Handbuch als Erweiterung gekennzeichnet ist (markiert mit BS2000 oder Erweiterung), sind nicht streng XPG4 Version 2- oder ISO C-konform.
Um Programme zu schreiben, die gemäß XPG5-Standard portabel sind, muss das Makro _XOPEN_SOURCE
auf den Wert 500 gesetzt werden. Das Makro _XOPEN_SOURCE_EXTENDED
wird in dieser Konstellation ignoriert. In dieser Implementierung sind nicht alle im XPG5-Standard enthaltenen Funktionsgruppen und Include-Dateien realisiert (z.B. gibt es keine asynchrone Ein-/Ausgabe und keine Echtzeitfunktionen). Die entsprechenden Funktionstest-Makros sind in der Include-Datei <unistd.h>
auf den Wert -1 gesetzt.