Provided by: manpages-de_4.21.0-2_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.  Die  Anforderung, dass das Makro definiert sein muss, bevor es in irgendwelche
       Header-Dateien eingebunden wird, existiert,  da  sich  Header-Dateien  ohne  Einschränkungen  gegenseitig
       einbinden  dürfen.  Daher  kann  beispielsweise  in  den  nachfolgenden  Zeilen die Definition des Makros
       _GNU_SOURCE keine Wirkung haben, da der Header <abc.h>  selbst  <xyz.h>  einbindet  (POSIX  erlaubt  dies
       explizit):

           #include <abc.h>
           #define _GNU_SOURCE
           #include <xyz.h>

       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 *Versatz, size_t Zähler);

       Dieses Format wird immer dann angewandt, 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 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 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 für Datei-Versätze 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.

       _TIME_BITS
              Wird diesem Makro der Wert 64 zugewiesen, dann wird  die  Breite  von  time_t(3type)  auf  64  bit
              geändert,  was  den  Umgang  mit  Zeitstempeln  jenseits  von  2038  erlaubt.  Dies  ist  eng  mit
              _FILE_OFFSET_BITS verwandt und könnte, abhängig von  der  Implementierung,  benötigen,  dass  dies
              gesetzt ist. Dieses Makro ist mit Glibc 2.34 verfügbar.

       _BSD_SOURCE (missbilligt 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 missbilligt. 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  bis  Glibc  2.19
              _BSD_SOURCE  und  _DEFAULT_SOURCE  ab  Glibc  2.20  benötigt, um ohne Warnung übersetzt zu werden,
              definieren Sie sowohl _BSD_SOURCE als auch _DEFAULT_SOURCE.

       _SVID_SOURCE (missbilligt 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 missbilligt.

       _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.  Bis  Glibc  2.19  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 vor Glibc 2.10; 199506L vor  Glibc  2.5;  199309L  vor  Glibc  2.1)  und
              _XOPEN_SOURCE  mit  dem  Wert  700  (600 vor Glibc 2.10; 500 vor Glibc 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.  Vor  Glibc 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. Seit Glibc 2.25 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.

              Ist _FORTIFY_SOURCE auf 3 gesetzt, dann werden zusätzliche Überprüfungen  hinzugefügt,  um  einige
              Funktionsaufrufe abzufangen, die mit einem Argument variabler Größe verwandt werden, bei denen der
              Compiler eine obere Grenze für ihren Wert ableiten kann. Beispielsweise  kann  ein  Programm,  bei
              denen das Größe-Argument von malloc(3) eine Variable ist, jetzt mit Fortify gesichert werden.

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

              Die Verwendung von _FORTIFY_SOURCE auf 3 gesetzt benötigt gcc(1) Version 12.0 oder neuer.

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

       Wenn  eines  von  __STRICT_ANSI__,  _ISOC99_SOURCE,  _ISOC11_SOURCE  (seit  Glibc  2.18),  _POSIX_SOURCE,
       _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED (bis Glibc 2.11),  _BSD_SOURCE  (bis  Glibc  2.19)
       oder  _SVID_SOURCE  (bis  Glibc  2.19)  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  vor  Glibc  2.4; 200112L seit Glibc 2.4 bis 2.9 und 200809L seit Glibc
             2.10.

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

STANDARDS

       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  seit  SUSv2
       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.

BEISPIELE

       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 <stdint.h>
       #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: %jdL\n",
                   (intmax_t) _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 _TIME_BITS
           printf("_TIME_BITS definiert: %d\n", _TIME_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), system_data_types(7)

       Der Abschnitt »Feature Test Macros« unter info libc.

       /usr/include/features.h

Ü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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die
       Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.