bionic (7) ftm.7.gz

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