Provided by: manpages-de_2.5-1_all bug

BEZEICHNUNG

       feature_test_macros - Feature-Test-Makros

BESCHREIBUNG

       Mit   Feature-Test-Makros   kann   der  Programmierer  steuern,  welche  Definitionen  aus
       System-Header-Dateien bei der Kompilierung eines Programms verwendet werden.

       HINWEIS: Um wirksam zu sein, muss die Definition eines  Feature-Test-Makros  im  Quelltext
       vor  den  #include-Anweisungen  für  die  Header-Dateien  stehen.  Dies  kann  entweder im
       Kompilierbefehl (cc -DMACRO=value) oder durch die  Definition  des  Makros  innerhalb  des
       Quellcodes vor dem Einlesen aller Header erreicht werden.

       Einige  Feature-Test-Makros helfen bei der Erstellung von portablen Anwendungen, indem sie
       die  Verwendung  nicht  standardgemäßer  Definitionen  verhindern.  Andere  Makros  können
       verwendet   werden,   um   gezielt  nicht  standardisierte  Definitionen,  die  sonst  per
       Voreinstellung nicht verwendet werden, zu verwenden.

       Die genauen Auswirkungen jedes der im Folgenden beschriebenen  Feature-Test-Makros  können
       Sie  durch  Auswertung  der  Header-Datei <features.h> ermitteln. Anmerkung: Applikationen
       müssen <features.h> nicht direkt einbinden; es ist im Gegenteil sogar  unerwünscht.  Siehe
       ANMERKUNGEN.

   Spezifikation der Funktion-Test-Makro-Anforderungen in Handbuchseiten
       Wenn  eine  Funktion  die  Definition  eines  Feature-Test-Makros  erfordert,  enthält die
       ÜBERSICHT einer Handbuchseit in  der  Regel  einen  Vermerk  der  folgenden  Form  (dieses
       Beispiel finden Sie in der Handbuchseite von acct(2)):

               #include <unistd.h>

               int acct(const char *filename);

           Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

               acct(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

       Das  ||  bedeutet,  dass zwecks Ermittlung der Deklaration von acct(2) aus <unistd.h> eine
       der beiden folgenden Makro-Definitionen vor dem Einfügen jeglicher Header-Dateien erfolgen
       muss:

           #define _BSD_SOURCE
           #define _XOPEN_SOURCE        /* oder jeder Wert < 500 */

       Alternativ können gleichwertige Definitionen in den Kompilierbefehl eingebettet werden:

           cc -D_BSD_SOURCE
           cc -D_XOPEN_SOURCE           # Oder jeder Wert < 500

       Beachten  Sie,  dass einige Feature-Test-Makros standardmäßig definiert sind. Daher ist es
       nicht immer erforderlich, die in der ÜBERSICHT angegebenen Feature-Test-Makro(s)  explizit
       anzugeben.

       In  wenigen  Fällen  verwenden  Handbuchseiten  eine  Abkürzung  für die Anforderungen der
       Feature-Test-Makros (dieses Beispiel stammt aus readahead(2)):

           #define _GNU_SOURCE
           #include <fcntl.h>

       ssize_t readahead(int fd, off64_t *offset, size_t count);

       Dieses Format wird immer dann angewendet, wenn nur  ein  einziges  Feature-Test-Makro  die
       Verwendung   der  Funktions-Deklaration  ermöglicht  und  das  Makro  nicht  standardmäßig
       definiert wird.

   Von Glibc »verstandene« Feature-Test-Makros
       In den Absätzen weiter unten wird erläutert, wie Feature-Test-Makros in  Linux-Glibc  2.x,
       x > 0, behandelt werden.

       Zuerst eine Zusammenfassung einiger Details für den Ungeduldigen:

       *  In modernem Quellcode müssen Sie höchstwahrscheinlich _POSIX_C_SOURCE (für Definitionen
          aus  verschiedenen  Versionen  von  POSIX.1),  _XOPEN_SOURCE  (für   Definitionen   aus
          verschiedenen  Versionen  von  SUS),  _GNU_SOURCE (für GNU- und/oder Linux-spezifischem
          Zeug)   und   _DEFAULT_SOURCE   (für   normalerweise   standardmäßig    bereitgestellte
          Definitionen) verwenden.

       *  Bestimmte  Makros  sind mit Vorgabewerten definiert. Daher mag es nicht notwendig sein,
          sie explizit zu definieren, obwohl eine oder mehrere  Makros  in  der  ÜBERSICHT  einer
          Handbuchseite  als  benötigt markiert sind. Die vollständigen Details der Vorgaben sind
          später in dieser Handbuchseite dargestellt.

       *  Die Definition von _XOPEN_SOURCE mit einem Wert von 600 oder mehr bewirkt den  gleichen
          Effekt  wie  die Definition von _POSIX_C_SOURCE mit einem Wert von 200112L oder größer.
          Hierbei kann

              _POSIX_C_SOURCE >= 200112L

          in den  Feature-Test-Makro-Anforderungen  in  der  ÜBERSICHT  einer  Handbuchseite  ist
          implizit angenommen, dass das Folgende den gleichen Effekt hat:

              _XOPEN_SOURCE >= 600

       *  Die  Definition von _XOPEN_SOURCE mit einem Wert von 700 oder mehr bewirkt den gleichen
          Effekt wie die Definition von _POSIX_C_SOURCE mit einem Wert von 200809L  oder  größer.
          Hierbei kann

              _POSIX_C_SOURCE >= 200809L

          in  den  Feature-Test-Makro-Anforderungen  in  der  ÜBERSICHT  einer  Handbuchseite ist
          implizit angenommen, dass das Folgende den gleichen Effekt hat:

              _XOPEN_SOURCE >= 700

       Die Linux-Glibc »versteht« die folgenden Feature-Test-Makros:

       __STRICT_ANSI__
               ISO Standard C. Dieses Makro wird impliziert definiert, wenn gcc(1) beispielsweise
               mit den Schaltern -std=c99 oder -ansi aufgerufen wird.

       _POSIX_C_SOURCE
               Mit  der  Definition  dieses  Makros stellen Header-Dateien Definitionen wie folgt
               bereit:

               •  Der Wert 1 aktiviert Definitionen gemäß POSIX.1-1990 und ISO C (1990).

               •  Ein Wert gleich oder größer  als  2  aktiviert  zusätzlich  Definitionen  gemäß
                  POSIX.2-1992.

               •  Der   Wert   199309L   oder   größer   aktiviert  Definitionen  gemäß  POSIX.1b
                  (Echtzeiterweiterungen).

               •  Der Wert 199506L oder größer aktiviert Definitionen gemäß POSIX.1c (Threads).

               •  (Seit  Glibc  2.3.3)  Der  Wert  200112L  oder  größer   aktiviert   zusätzlich
                  Definitionen    gemäß   der   POSIX.1-2001   Base   Specification   (ohne   die
                  XSI-Erweiterung). Dieser Wert führt auch zur Aktivierung von C95-  (seit  Glibc
                  2.12)  und C99 (seit Glibc 2.10) Funktionalitäten (mit anderen Worten, dies ist
                  äquivalent zur Definition von _ISOC99_SOURCE).

               •  (Seit  Glibc  2.10)  Der  Wert  200809L  oder   größer   aktiviert   zusätzlich
                  Definitionen    gemäß   der   POSIX.1-2008   Base   Specification   (ohne   die
                  XSI-Erweiterung).

       _POSIX_SOURCE
               Die Definition dieses überholten Makros mit einem beliebigen Wert hat die  gleiche
               Wirkung wie die Definition von _POSIX_C_SOURCE mit dem Wert 1.

               Da  dieses  Makro  veraltet  ist,  ist  es im Allgemeinen nicht dokumentiert, wenn
               Feature-Test-Makro-Anforderungen in Handbuchseiten beschrieben werden.

       _XOPEN_SOURCE
               Mit der Definition dieses Makros stellen  Header-Dateien  Definitionen  wie  folgt
               bereit:

               •  Die  Zuweisung  eines  beliebigen  Wertes  aktiviert Definitionen nach POSIX.1,
                  POSIX.2 und XPG4.

               •  Der Wert 500 oder größer aktiviert zusätzlich die Definitionen für SUSv2  (UNIX
                  98).

               •  (Seit Glibc 2.2) Der Wert 600 oder größer aktiviert zusätzlich Definitionen für
                  SUSv3  (UNIX  03,  also   die   POSIX.1-2001   Base   Specification   und   die
                  XSI-Erweiterung) sowie C99-Definitionen.

               •  (Seit  Glibc  2.10)  Der Wert 700 oder größer aktiviert zusätzlich Definitionen
                  für SUSv4 (d.h. die POSIX.1-2001 Base Specification und die XSI-Erweiterung).

               Falls __STRICT_ANSI__ nicht  definiert  ist  oder  _XOPEN_SOURCE  mit  einem  Wert
               identisch  zu  oder  größer  als  500 und weder _POSIX_SOURCE noch _POSIX_C_SOURCE
               explizit definiert sind dann werden die folgenden Makros implizit definiert:

               •  _POSIX_SOURCE wird auf den Wert 1 gesetzt.

               •  _POSIX_C_SOURCE wird definiert, entsprechend des Wertes von _XOPEN_SOURCE:

                  _XOPEN_SOURCE < 500
                         _POSIX_SOURCE wird auf den Wert 2 gesetzt.

                  500 <= _XOPEN_SOURCE < 600
                         _POSIX_SOURCE wird auf den Wert 199506L gesetzt.

                  600 <= _XOPEN_SOURCE < 700
                         _POSIX_SOURCE wird auf den Wert 200112L gesetzt.

                  700 <= _XOPEN_SOURCE (seit Glibc 2.10)
                         _POSIX_SOURCE wird auf den Wert 200809L gesetzt.

               Zusätzlich bewirkt die Definition von _XOPEN_SOURCE mit einem Wert  von  500  oder
               mehr den gleichen Effekt wie die Definition von _XOPEN_SOURCE_EXTENDED.

       _XOPEN_SOURCE_EXTENDED
               Wenn  dieses  Makro  und  _XOPEN_SOURCE  definiert  sind, dann werden Definitionen
               entsprechend den XPG4v2-  (SUSv1-)UNIX-Erweiterungen  (UNIX  95)  aktiviert.  Wird
               _XOPEN_SOURCE mit einem Wert von 500 oder mehr definiert, ist der Effekt identisch
               zur Definition von _XOPEN_SOURCE_EXTENDED. Der Einsatz von  _XOPEN_SOURCE_EXTENDED
               in neuem Quellcode sollte vermieden werden.

               Da  die Definition von _XOPEN_SOURCE mit einem Wert von 500 oder mehr den gleichen
               Effekt wie die  Definition  von  _XOPEN_SOURCE_EXTENDED  hat,  wird  das  letztere
               (veraltete)  Makro  im  Allgemeinen  in  der  ÜBERSICHT  in  Handbuchseiten  nicht
               beschrieben.

       _ISOC99_SOURCE (seit Glibc 2.1.3)
               Aktiviert Deklarationen, die mit dem ISO-C99-Standard konsistent sind.

               Frühere   Glibc   2.1.x-Versionen   verarbeiteten   ein    gleichwertiges    Makro
               _ISOC9X_SOURCE   (weil  der  C99-Standard  noch  nicht  fertig  war).  Obwohl  die
               Verwendung dieses Makros  obsolet  ist,  wird  es  von  der  Glibc  weiter  zwecks
               Abwärtskompatibilität unterstützt.

               Die   Definition   von   _ISOC99_SOURCE   aktiviert   auch  ISO  C  (1990)  Anhang
               1-Definitionen (»C95«). (Die hauptsächliche Änderung in C95 war die  Unterstützung
               für internationale Zeichensätze.)

               Der Aufruf des C-Compilers mit der Option -std=c99 bewirkt den gleichen Effekt wir
               die Definition dieses Makros.

       _ISOC11_SOURCE (seit Glibc 2.16)
               Aktiviert  Deklarationen,  die  mit  dem  ISO-C11-Standard  konsistent  sind.  Die
               Definition  dieses  Makros  aktiviert  auch  C99-  und  C95-Funktionalitäten  (wie
               _ISOC99_SOURCE).

               Der Aufruf des C-Compilers mit der Option -std=c11 bewirkt den gleichen Effekt wie
               die Definition dieses Makros.

       _LARGEFILE64_SOURCE
               Aktiviert   Definitionen   für  das  durch  LFS  (Large  File  Summit)  definierte
               alternative API als »Übergangserweiterungen« zu der »Single  UNIX  Specification«.
               (Siehe  ⟨http://opengroup.org/platform/lfs.html⟩.) Das alternative API besteht aus
               einer Reihe von neuen Objekten (d.h. Funktionen und Typen), deren Namen  mit  »64«
               endet (z. B. off64_t versus off_t, lseek64() versus lseek(), usw.). Neue Programme
               sollten dieses Makro nicht verwenden, sondern _FILE_OFFSET_BITS=64 einsetzen.

       _LARGEFILE_SOURCE
               Dieses Makro wurde traditionell verwandt, um  bestimmte  Funktionen  (insbesondere
               fseeko(3)  und ftello(3)) bereitzustellen, die sich um Beschränkungen älterer APIs
               (fseek(3) und ftell(3)) kümmerten, die  long  int  für  Datei-Offsets  verwandten.
               Dieses  Makro  ist  implizit  definiert, falls _XOPEN_SOURCE mit einem Wert gleich
               oder größer als 500 definiert ist.  Neue  Programme  sollten  dieses  Makro  nicht
               einsetzen;  um  das  gleiche Ergebnis zu erhalten, ist der empfohlene Mechanismus,
               _XOPEN_SOURCE wie gerade beschrieben oder _FILE_OFFSET_BITS mit einem Wert von  64
               zu definieren.

       _FILE_OFFSET_BITS
               Wird  diesem  Makro  der  Wert  64  zugewiesen,  werden  automatisch  Verweise auf
               32-Bit-Funktionen     und     -Datentypen      für      Datei-Ein/Ausgabe      und
               Dateisystem-Operationen in Verweise auf ihre 64-Bit-Pendants konvertiert. Dies ist
               für die Ein-/Ausgabe in und aus großen Dateien (> 2 Gigabyte) auf  32-Bit-Systemen
               nützlich.  (Mit der Definition dieses Makros können korrekt geschriebene Programme
               nach einer einfachen Neukompilierung große Dateien bearbeiten.)

               64-Bit-Systeme erlauben natürlich Dateigrößen größer als 2  Gigabyte.  Auf  diesen
               Systemen dieses Makro hat keine Wirkung.

       _BSD_SOURCE (misbilligt seit Glibc 2.20)
               Mit  der  Definition  dieses  Makros  mit irgend einem Wert stellen Header-Dateien
               BSD-abgeleitete Definitionen bereit.

               In Glibc bis einschließlich 2.18 bewirkte die Definition dieses Makros auch,  dass
               BSD-Definitionen  in  manchen  Situationen  vorgezogen werden, wenn sich Standards
               widersprechen. Sind aber eines oder mehrere Makros aus  der  Gruppe  _SVID_SOURCE,
               _POSIX_SOURCE,   _POSIX_C_SOURCE,   _XOPEN_SOURCE,   _XOPEN_SOURCE_EXTENDED   oder
               _GNU_SOURCE definiert, werden BSD-Definitionen missachtet. Seit Glibc  2.19  führt
               _BSD_SOURCE  nicht  mehr  dazu,  dass  BSD-Definitionen  im Konfliktfall bevorzugt
               werden.

               Seit Glibc 2.20 wird dieses Makro misbilligt. Es hat jetzt den gleichen Effekt wie
               die  Definition  von  _DEFAULT_SOURCE,  erzeugt  aber eine Compiler-Warnung (außer
               _DEFAULT_SOURCE ist auch definiert). Verwenden Sie stattdessen _DEFAULT_SOURCE. Um
               Code  zu  erlauben, der in Glibc 2.19 und älter _BSD_SOURCE und _DEFAULT_SOURCE in
               Glibc 2.20 und neuer benötigt, um ohne Warnung übersetzt zu werden, definieren Sie
               sowohl _BSD_SOURCE als auch _DEFAULT_SOURCE.

       _SVID_SOURCE (misbilligt seit Glibc 2.20)
               Die  Definition  dieses Makros mit einem beliebigen Wert veranlasst Header-Dateien
               zur Aktivierung von von System V abgeleiteten Definitionen. (SVID steht für System
               V Interface Definition; siehe standards(7).)

               Dieses Makro wird in der gleichen Art wie _BSD_SOURCE seit Glibc 2.20 misbilligt.

       _DEFAULT_SOURCE (seit Glibc 2.19)
               Dieses    Makro    kann   definiert   werden,   um   sicherzustellen,   dass   die
               »Standarddefinitionen« bereitgestellt werden, selbst wenn die  Vorgaben  ansonsten
               deaktiviert   würden.  Dies  passiert  beispielsweise,  wenn  individuelle  Makros
               explizit  definiert  sind  oder  der  Compiler  in  einem  seiner   »Standardmodi«
               aufgerufen wird (z.B. cc -std=c99).

               Die  »Standard«-Definition  umfasst  die  von POSIX.1-2008 und C99 umfassten sowie
               verschiedene ursprünglich aus BDS und System V abgeleitete Definitionen. In  Glibc
               2.19  und  älter  waren  diese Standardwerte ungefähr zu der folgenden, expliziten
               Definition identisch:

                   cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809

       _ATFILE_SOURCE (seit Glibc 2.4)
               Die Definition dieses Makros mit einem beliebigen Wert  veranlasst  Header-Dateien
               zur  Aktivierung  einer Auswahl von Funktion mit der Endung »at«, siehe openat(2).
               Seit Glibc 2.10 wird dieses Makro auch implizit  definiert,  wenn  _POSIX_C_SOURCE
               mit einem Wert größer oder gleich 200809L definiert ist.

       _GNU_SOURCE
               Die  Definition  dieses  Makros  (mit  einem  beliebigen  Wert) definiert implizit
               _ATFILE_SOURCE,   _LARGEFILE64_SOURCE,   _ISOC99_SOURCE,   _XOPEN_SOURCE_EXTENDED,
               _POSIX_SOURCE,  _POSIX_C_SOURCE  mit  dem Wert 200809L (200112L in Glibc-Versionen
               vor 2.10; 199506L in Glibc-Versionen vor 2.5; 199309L in Glibc-Versionen vor  2.1)
               und  _XOPEN_SOURCE  mit  dem  Wert  700  (600  in Glibc-Versionen vor 2.10; 500 in
               Glibc-Versionen vor  2.2).  Darüber  hinaus  werden  verschiedene  GNU-spezifische
               Erweiterungen aktiviert.

               Seit   Glibc   2.19   hat   die   Definition  von  _GNU_SOURCE  auch  den  Effekt,
               _DEFAULT_SOURCE implizit zu definieren. In  Glibc-Versionen  vor  2.20  hatte  die
               Definition  von _GNU_SOURCE auch den Effekt, _BSD_SOURCE und _SVID_SOURCE implizit
               zu definieren.

       _REENTRANT
               Historisch war es bei verschiedenen  C-Bibliotheken  notwendig,  dieses  Makro  in
               allem  Code,  der multithreaded ist, zu definieren. (Einige C-Bibliotheken könnten
               dies noch immer benötigen). Unter Glibc legte dieses Makro auch  Definitionen  von
               bestimmten, wiedereintrittsfähigen Funktionen offen.

               Allerdings  ist  Glibc  standardmäßig seit vielen Jahren Thread-sicher (seit Glibc
               2.3). Der einzige Effekt der Definition von _REENTRANT war,  dass  sie  auch  eine
               oder zwei der gleichen Deklarationen aktivierte, die auch durch die Definition von
               _POSIX_C_SOURCE mit einem Wert von 199606L oder höher aktiviert werden.

               _REENTRANT ist jetzt veraltet. In Glibc 2.25 und  neuer  ist  die  Definition  von
               _REENTRANT  äquivalent  zur  Definition  von _POSIX_C_SOURCE mit dem Wert 199606L.
               Falls durch eine andere Methode eine höhere Konformitätsstufe (wie _POSIX_C_SOURCE
               selbst,  _XOPEN_SOURCE, _DEFAULT_SOURCE oder _GNU_SOURCE) ausgewählt wird, hat die
               Definition von _REENTRANT keinen Effekt.

               Dieses Makro wird automatisch definiert, falls mit cc -pthread kompiliert wird.

       _THREAD_SAFE
               Synonym für das (veraltete) _REENTRANT; wird für die  Kompatibilität  mit  einigen
               anderen Implementierungen bereitgestellt.

       _FORTIFY_SOURCE (seit Glibc 2.3.4)
               Die  Definition dieses Makros führt dazu, dass ein paar leichtgewichtige Prüfungen
               durchgeführt werden, um einige  Pufferüberlauffehler  beim  Einsatz  verschiedener
               Zeichenketten-  und  Speicherveränderungsfunktionen (beispielsweise bei memcpy(3),
               memset(3), stpcpy(3), strcpy(3), strncpy(3),  strcat(3),  strncat(3),  sprintf(3),
               snprintf(3), vsprintf(3), vsnprintf(3), gets(3) und deren Weitzeichenvarianten) zu
               erkennen. Bei einigen  Funktionen  wird  die  Konsistenz  der  Argumente  geprüft,
               beispielsweise  dass  bei  open(2)  ein  Argument  mode  übergeben wurde, wenn die
               angegebenen Schalter O_CREAT enthalten. Es  werden  nicht  alle  Probleme  sondern
               lediglich einige häufige Fälle erkannt.

               Ist  der  Wert  von  _FORTIFY_SOURCE gleich 1 und die Compiler-Optimierungsstufe 1
               (gcc -O1) oder höher, erfolgt eine Beschränkung auf Kontrollen, die das  Verhalten
               standardkonformer  Programme  nicht  ändern  sollten.  Wird  _FORTIFY_SOURCE auf 2
               gesetzt, werden ein paar  Kontrollen  hinzugefügt,  die  aber  Fehler  in  einigen
               standardkonformen Programmen bewirken könnten.

               Einige  der  Prüfungen  können  bei der Kompilierung ausgeführt werden (mittels in
               Header-Dateien  implementierter  Makrologik)  und  führen  zu  Compiler-Warnungen,
               andere  Kontrollen  finden  zur Laufzeit statt und führen zu einem Laufzeitfehler,
               wenn die Überprüfung fehlschlägt.

               Die Verwendung dieses Makros benötigt die Unterstützung durch den Compiler.  Diese
               ist in gcc(1) seit Version 4.0 verfügbar.

   Standarddefinitionen, implizite Definitionen und Kombinationsdefinitionen
       Ohne   explizit   definierte   Feature-Test-Makros   werden  standardmäßig  die  folgenden
       Feature-Test-Makros definiert: _BSD_SOURCE (in Gblic 2.19  und  älter),  _SVID_SOURCE  (in
       Glibc    2.19   und   älter),   _DEFAULT_SOURCE   (seit   Glibc   2.19)_POSIX_SOURCE   und
       _POSIX_C_SOURCE=200809L (200112L in Glibc-Versionen vor 2.10; 199506L  in  Glibc-Versionen
       vor 2.4; 199309L in Glibc-Versionen vor 2.1).

       Wenn   eines   von   __STRICT_ANSI__,   _ISOC99_SOURCE,   _POSIX_SOURCE,  _POSIX_C_SOURCE,
       _XOPEN_SOURCE,  _XOPEN_SOURCE_EXTENDED,  _BSD_SOURCE  (in  Glibc  2.19  und  älter)   oder
       _SVID_SOURCE  (in  Glibc 2.19 und älter) explizit definiert ist, dann werden standardmäßig
       _BSD_SOURCE, _SVID_SOURCE und _DEFAULT_SOURCE nicht definiert.

       Sind  _POSIX_SOURCE  und   _POSIX_C_SOURCE   nicht   explizit   definiert   und   entweder
       __STRICT_ANSI__  ist  nicht definiert oder _XOPEN_SOURCE hat einen Wert von 500 oder mehr,
       dann

       *  wird _POSIX_SOURCE auf den Wert 1 gesetzt und

       *  _POSIX_C_SOURCE erhält einen der folgenden Werte:

          •  2, falls _XOPEN_SOURCE mit einem Wert kleiner als 500 definiert ist;

          •  199506L, falls _XOPEN_SOURCE mit einem Wert größer oder gleich 500 und  kleiner  als
             600 definiert ist; oder

          •  (Seit  Glibc 2.4) 200112L, falls _XOPEN_SOURCE mit einem Wert größer oder gleich 600
             und kleiner als 700 definiert ist.

          •  (Seit Glibc 2.4) 200809L, falls _XOPEN_SOURCE mit einem Wert größer oder gleich  700
             definiert ist.

          •  Ältere  Versionen von Glibc kennen die Werte 200112L und 200809L für _POSIX_C_SOURCE
             nicht, der Wert für das Makro hängt also von der Glibc-Version ab.

          •  Wenn _XOPEN_SOURCE nicht definiert ist, hängt der zulässige Wert von _POSIX_C_SOURCE
             von der Glibc-Version ab: 199506L für Glibc-Versionen vor 2.4; 200112L für Glibc 2.4
             bis 2.9 und 200809L seit Glibc 2.10.

       Es können mehrere Makros definiert werden, die Effekte akkumulieren sich.

KONFORM ZU

       POSIX.1 legt _POSIX_C_SOURCE, _POSIX_SOURCE und _XOPEN_SOURCE fest.

       _XOPEN_SOURCE_EXTENDED wurde von XPG4v2 (auch bekannt als SUSv1) spezifiziert, ist aber in
       in  SUSv2  und  neuer vorhanden. _FILE_OFFSET_BITS kommt in keinem Standard vor, wird aber
       auf verschiedenen anderen Implementierungen verwendet.

       _BSD_SOURCE, _SVID_SOURCE, _DEFAULT_SOURCE, _ATFILE_SOURCE, _GNU_SOURCE,  _FORTIFY_SOURCE,
       _REENTRANT und _THREAD_SAFE sind Linux-spezifisch (Glibc).

ANMERKUNGEN

       <features.h>  ist  eine Linux/Glibc-spezifische Header-Datei. Andere Systeme verfügen über
       eine analoge Datei, die in der Regel einen anderen Namen trägt.  Diese  Header-Datei  wird
       bei  Bedarf  automatisch  durch  andere Header-Dateien einbezogen: sie muss nicht explizit
       einbezogen werden, um Feature-Test-Makros zu verwenden.

       Je nachdem, welche  der  oben  genannten  Feature-Test-Makros  definiert  sind,  definiert
       <features.h>  intern  verschiedene  weitere  Makros,  die von anderen Glibc-Header-Dateien
       überprüft werden. Die Namen dieser Makros beginnen mit zwei vorangestellten  Unterstrichen
       (z.  B.  __USE_MISC).  Programme  sollten  diese Makros nie direkt definieren: stattdessen
       sollten die passenden Feature-Test-Makro(s) aus der obigen Liste eingesetzt werden.

BEISPIEL

       Mit dem folgenden Programm können Sie erkunden, wie die verschiedenen  Feature-Test-Makros
       abhängig   von  der  Glibc-Version  und  welche  explizit  gesetzt  werden.  Die  folgende
       Shell-Sitzung auf einem  System  mit  Glibc  2.10  zeigt  einige  Beispiele  für  mögliche
       Ausgaben:

           $ cc ftm.c
           $ ./a.out
           _POSIX_SOURCE definiert
           _POSIX_C_SOURCE definiert: 200809L
           _BSD_SOURCE definiert
           _SVID_SOURCE definiert
           _ATFILE_SOURCE definiert
           $ cc -D_XOPEN_SOURCE=500 ftm.c
           $ ./a.out
           _POSIX_SOURCE definiert
           _POSIX_C_SOURCE definiert: 199506L
           _XOPEN_SOURCE definiert: 500
           $ cc -D_GNU_SOURCE ftm.c
           $ ./a.out
           _POSIX_SOURCE definiert
           _POSIX_C_SOURCE definiert: 200809L
           _ISOC99_SOURCE definiert
           _XOPEN_SOURCE definiert: 700
           _XOPEN_SOURCE_EXTENDED definiert
           _LARGEFILE64_SOURCE definiert
           _BSD_SOURCE definiert
           _SVID_SOURCE definiert
           _ATFILE_SOURCE definiert
           _GNU_SOURCE definiert

   Programmquelltext

       /* ftm.c */

       #include <stdio.h>
       #include <unistd.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
       #ifdef _POSIX_SOURCE
           printf("_POSIX_SOURCE definiert\n");
       #endif

       #ifdef _POSIX_C_SOURCE
           printf("_POSIX_C_SOURCE definiert: %ldL\n", (long) _POSIX_C_SOURCE);
       #endif

       #ifdef _ISOC99_SOURCE
           printf("_ISOC99_SOURCE definiert\n");
       #endif

       #ifdef _ISOC11_SOURCE
           printf("_ISOC11_SOURCE definiert\n");
       #endif

       #ifdef _XOPEN_SOURCE
           printf("_XOPEN_SOURCE definiert: %d\n", _XOPEN_SOURCE);
       #endif

       #ifdef _XOPEN_SOURCE_EXTENDED
           printf("_XOPEN_SOURCE_EXTENDED definiert\n");
       #endif

       #ifdef _LARGEFILE64_SOURCE
           printf("_LARGEFILE64_SOURCE definiert\n");
       #endif

       #ifdef _FILE_OFFSET_BITS
           printf("_FILE_OFFSET_BITS definiert: %d\n", _FILE_OFFSET_BITS);
       #endif

       #ifdef _BSD_SOURCE
           printf("_BSD_SOURCE definiert\n");
       #endif

       #ifdef _SVID_SOURCE
           printf("_SVID_SOURCE definiert\n");
       #endif

       #ifdef _DEFAULT_SOURCE
           printf("_DEFAULT_SOURCE definiert\n");
       #endif

       #ifdef _ATFILE_SOURCE
           printf("_ATFILE_SOURCE definiert\n");
       #endif

       #ifdef _GNU_SOURCE
           printf("_GNU_SOURCE definiert\n");
       #endif

       #ifdef _REENTRANT
           printf("_REENTRANT definiert\n");
       #endif

       #ifdef _THREAD_SAFE
           printf("_THREAD_SAFE definiert\n");
       #endif

       #ifdef _FORTIFY_SOURCE
           printf("_FORTIFY_SOURCE definiert\n");
       #endif

           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       libc(7), standards(7)

       Der Abschnitt »Feature Test Macros« unter info libc.

       /usr/include/features.h

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die   deutsche   Übersetzung  dieser  Handbuchseite  wurde  von  Martin  Eberhard  Schauer
       <Martin.E.Schauer@gmx.de> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese Übersetzung ist Freie Dokumentation;  lesen  Sie  die  GNU  General  Public  License
       Version   3  oder  neuer  bezüglich  der  Copyright-Bedingungen.  Es  wird  KEINE  HAFTUNG
       übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an <debian-l10n-german@lists.debian.org>.