Provided by: manpages-de_4.27.0-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 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.

Linux man-pages 6.9.1                             15. Juni 2024                           feature_test_macros(7)