Provided by: manpages-de_4.23.1-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. 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
           #define _FILE_OFFSET_BITS 64
           #include <fcntl.h>

           ssize_t readahead(int fd, off_t *Versatz, size_t Zähler);

       Dieses  Format wird immer dann angewandt, wenn die Feature-Test-Makros sicherstellen, dass
       passende Funktionsdeklarationen sichtbar sind und die Makros nicht standardmäßig definiert
       werden.

   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.  Es  ist  auch
              beim  Aufruf  von  Funktionen wie copy_file_range(2) nützlich, die in jüngerer Zeit
              hinzugefügt wurden und nur in  64-bit-Varianten  existieren.  (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 Unterstützung vom Compiler, die seit GCC  4.0
              und  Clang  2.6  verfügbar  ist.  Die  Verwendung von _FORTIFY_SOURCE gesetzt auf 3
              benötigt GCC 12.0 oder neuer oder Clang 9.0 oder neuer,  zusammen  mit  Glibc  2.33
              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.

       _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 Glibc-spezifisch.

GESCHICHTE

       _XOPEN_SOURCE_EXTENDED  wurde  von  XPG4v2 (auch bekannt als SUSv1) spezifiziert, ist aber
       seit SUSv2 vorhanden.

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 ist definiert\n");
       #endif

       #ifdef _POSIX_C_SOURCE
           printf("_POSIX_C_SOURCE ist definiert: %jdL\n",
                   (intmax_t) _POSIX_C_SOURCE);
       #endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       #ifdef _FORTIFY_SOURCE
           printf("_FORTIFY_SOURCE ist 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⟩.