Provided by: manpages-de_2.15-1build1_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 <xys.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 *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  5.02  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>.