Provided by: manpages-de_0.10-1_all bug

BEZEICHNUNG

       feature_test_macros - Feature-Test-Makros

"UBERSICHT

       #include <features.h>

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"ur  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   standardgemaBer
       Definitionen  verhindern.  Andere  Makros  konnen  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
       konnen Sie durch Auswertung der Header-Datei <features.h> ermitteln.

   Spezifikation der Funktion-Test-Makro-Anforderungen in Handbuchseiten
       Wenn  eine Funktion die Definition eines Feature-Test-Makros erfordert,
       enthalt die UBERSICHT 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
       Einfugen jeglicher Header-Dateien erfolgen muss:

              #define _BSD_SOURCE
              #define _XOPEN_SOURCE        /* oder jeder Wert < 500 */

       Alternativ konnen 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"aBig definiert
       sind. Daher ist es nicht  immer  erforderlich,  die  in  der  UBERSICHT
       angegebenen   Feature-Test-Makro(s)  explizit  anzugeben.  Einzelheiten
       finden Sie weiter unten.

       In wenigen Fallen  verwenden  Handbuchseiten  eine  Abkurzung  fur  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 ermoglicht
       und das Makro nicht standardmaBig definiert wird.

   Von Glibc >>verstandene<< Feature-Test-Makros
       Im Folgenden wird erlautert,  wie  Feature-Test-Makros  in  Linux-Glibc
       2.x, x > 0, behandelt werden.

       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:

              o  Der Wert 1 aktiviert Definitionen gemaB POSIX.1-1990 und  ISO
                 C (1990).

              o  Ein  Wert  gleich  oder  groBer  als  2  aktiviert zusatzlich
                 Definitionen gemaB POSIX.2-1992.

              o  Der Wert 199309L oder  groBer  aktiviert  Definitionen  gemaB
                 POSIX.1b (Echtzeiterweiterungen).

              o  Der  Wert  199506L  oder  groBer aktiviert Definitionen gemaB
                 POSIX.1c (Threads).

              o  (Seit Glibc 2.3.3) Der Wert  200112L  oder  groBer  aktiviert
                 Definitionen  gemaB der POSIX.1-2001 Base Specification (ohne
                 die XSI-Erweiterung).

              o  (Seit Glibc 2.10) Der  Wert  200809L  oder  groBer  aktiviert
                 Definitionen  gemaB der POSIX.1-2008 Base Specification (ohne
                 die XSI-Erweiterung).

       _POSIX_SOURCE
              Die Definition dieses uberholten  Makros  mit  einem  beliebigen
              Wert   hat   die   gleiche   Wirkung   wie  die  Definition  von
              _POSIX_C_SOURCE mit dem Wert 1.

       _XOPEN_SOURCE
              Mit  der  Definition  dieses   Makros   stellen   Header-Dateien
              Definitionen wie folgt bereit:

              o  Die  Zuweisung eines beliebigen Wertes aktiviert Definitionen
                 nach POSIX.1, POSIX.2 und XPG4.

              o  Der  Wert  500   oder   groBer   aktiviert   zusatzlich   die
                 Definitionen fur SUSv2 (UNIX 98).

              o  (Seit   Glibc   2.2)  Der  Wert  600  oder  groBer  aktiviert
                 zusatzlich  Definitionen  fur  SUSv3  (UNIX  03,   also   die
                 POSIX.1-2001  Base  Specification  und  die  XSI-Erweiterung)
                 sowie C99-Definitionen.

              o  (Seit  Glibc  2.10)  Der  Wert  700  oder  groBer   aktiviert
                 zusatzlich Definitionen fur SUSv4 (d.h. die POSIX.1-2001 Base
                 Specification und die XSI-Erweiterung).

       _XOPEN_SOURCE_EXTENDED
              Wenn dieses Makro und _XOPEN_SOURCE definiert sind, dann  werden
              Definitionen entsprechend den XPG4v2- (SUSv1-)UNIX-Erweiterungen
              (UNIX 95) aktiviert. Dieses Makro wird auch implizit  definiert,
              wenn _XOPEN_SOURCE ein Wert von 500 oder groBer zugewiesen wird.

       _ISOC99_SOURCE
              Aktiviert  C99-Erganzungen  zu  ISO  C (1990). Dieses Makro wird
              seit  Glibc  2.1.3  erkannt;   fruhere   Glibc   2.1.x-Versionen
              verarbeiteten  das  gleichwertige Makro _ISOC9X_SOURCE (weil der
              C99-Standard noch nicht fertig war). Obwohl das  letztere  Makro
              obsolet   ist,   wird   es   von   der   Glibc   weiter   zwecks
              Abwartskompatibilitat unterstutzt.

       _LARGEFILE64_SOURCE
              Aktiviert Definitionen fur die alternative API-Spezifikation von
              der  LFS  (Large  File  Summit),  die  als >>Erweiterung fur den
              Ubergang<< zur Single UNIX  Specification  gedacht  ist.  (Siehe
              http://opengroup.org/platform/lfs.html.)   Die  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
              diese      Schnittstelle      nicht      verwenden,      sondern
              _FILE_OFFSET_BITS=64 einsetzen.

       _FILE_OFFSET_BITS
              Wird diesem Makro der Wert  64  zugewiesen,  werden  automatisch
              Verweise    auf    32-Bit-Funktionen    und    -Datentypen   fur
              Datei-Ein/Ausgabe und Dateisystem-Operationen  in  Verweise  auf
              ihre  64-Bit-Pendants  konvertiert.  Dies  ist  nutzlich fur die
              Ein-/Ausgabe in und  aus  groBen  Dateien  (>  2  Gigabyte)  auf
              32-Bit-Systemen.   (Mit  der  Definition  dieses  Makros  konnen
              korrekt   geschriebene   Programme    nach    einer    einfachen
              Neukompilierung   groBe   Dateien   bearbeiten.)  64-Bit-Systeme
              erlauben naturlich DateigroBen groBer als 2 Gigabyte. Auf diesen
              Systemen dieses Makro hat keine Wirkung.

       _BSD_SOURCE
              Die Zuweisung eines beliebigen Wertes fur dieses Makro aktiviert
              von BSD abgeleitete Definitionen. Die Definition  dieses  Makros
              bewirkt  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.

       _SVID_SOURCE
              Die  Definition  dieses  Makros  mit   einem   beliebigen   Wert
              veranlasst  Header-Dateien  zur  Aktivierung  von  von  System V
              abgeleiteten Definitionen. (SVID steht fur  System  V  Interface
              Definition; siehe standards(7).)

       _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 groBer oder gleich 200809L definiert ist.

       _GNU_SOURCE
              Die  Definition  dieses  Makros  (mit einem beliebigen Wert) ist
              gleichwertig mit der Definition von  _BSD_SOURCE,  _SVID_SOURCE,
              _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).   Daruber   hinaus   werden
              verschiedene     GNU-spezifische     Erweiterungen    aktiviert.
              Widerspruche zwischen  Standards  werden  unter  Ausschluss  von
              BSD-Funktionen gelost.

       _REENTRANT
              Die     Definition    dieses    Makros    aktiviert    bestimmte
              wiedereintrittsfahige   Funktionen.    Fur    Multithread-fahige
              Programm verwenden Sie stattdessen cc -pthread.

       _THREAD_SAFE
              Synonym  fur _REENTRANT; wird fur die Kompatibilitat mit einigen
              anderen Implementierungen bereitgestellt.

       _FORTIFY_SOURCE (seit Glibc 2.3.4)
              Die Definition  dieses  Makros  bewirkt,  dass  einige  einfache
              Kontrollen  fur  die  Erkennung von Pufferuberlauffehlern. Diese
              Fehler konnen bei der Verwendung  diverser  Funktionen  fur  die
              Manipulation von Zeichenketten und Speicher auftreten. Es werden
              nicht alle Pufferuberlauffehler erkannt werden, nur  einige  der
              haufigsten   Falle.   Die   aktuelle   Implementierung   enthalt
              Kontrollen  fur   die   Aufrufe   von   memcpy(3),   mempcpy(3),
              memmove(3),   memset(3),   stpcpy(3),   strcpy(3),   strncpy(3),
              strcat(3),  strncat(3),  sprintf(3),  snprintf(3),  vsprintf(3),
              vsnprintf(3)  und  gets(3).  Ist  der  Wert  von _FORTIFY_SOURCE
              gleich 1 und die  Compiler-Optimierungsstufe  1  (gcc -O1)  oder
              hoher,   erfolgt  eine  Beschrankung  auf  Kontrollen,  die  das
              Verhalten standardkonformer Programme nicht andern sollten. Wird
              _FORTIFY_SOURCE  auf  2  gesetzt,  werden  ein  paar  Kontrollen
              hinzugefugt,  die  aber  Fehler  in  einigen   standardkonformen
              Programmen bewirken konnten. Einige der Prufungen konnen bei der
              Kompilierung ausgefuhrt werden und fuhren zu Compiler-Warnungen,
              andere  Kontrollen finden zur Laufzeit statt und fuhren zu einem
              Laufzeitfehler, wenn die Uberprufung fehlschlagt.  Der  Compiler
              muss  die  Verwendung dieses Makros unterstutzen, was fur gcc(1)
              seit Version 4.0 der Fall ist.

   Standarddefinitionen, implizite Definitionen und Kombinationsdefinitionen
       Ohne explizit definierte Feature-Test-Makros werden  standardmaBig  die
       folgenden  Feature-Test-Makros  definiert:  _BSD_SOURCE,  _SVID_SOURCE,
       _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
       oder _SVID_SOURCE explizit definiert  ist,  dann  werden  standardmaBig
       _BSD_SOURCE und _SVID_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 erhalt einen der folgenden Werte:

                o  2,  XOPEN_SOURCE  mit  einem Wert kleiner als 500 definiert
                   ist;

                o  199506L, XOPEN_SOURCE mit einem Wert groBer oder gleich 500
                   und kleiner als 600 definiert ist; oder

                o  (Seit  Glibc  2.4)  200112L,  XOPEN_SOURCE  mit  einem Wert
                   groBer oder gleich 600 und kleiner als 700 definiert ist.

                o  (Seit Glibc 2.4) 200809L, wenn XOPEN_SOURCE mit einem  Wert
                   groBer oder gleich 700 definiert ist.

                o  Altere  Versionen  von  Glibc  kennen die Werte 200112L und
                   200809L fur _POSIX_C_SOURCE nicht, der Wert fur  das  Makro
                   hangt also von der Glibc-Version ab.

                o  Wenn _XOPEN_SOURCE nicht definiert ist, hangt der zulassige
                   Wert von _POSIX_C_SOURCE von der Glibc-Version ab:  199506L
                   fur  Glibc-Versionen vor 2.4; 200112L fur Glibc 2.4 bis 2.9
                   und 200809L seit Glibc 2.10.

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

       _FILE_OFFSET_BITS   kommt   in  keinem  Standard  vor,  wird  aber  auf
       verschiedenen anderen Implementierungen verwendet.

       _BSD_SOURCE,      _SVID_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  verfugen  uber  eine  analoge  Datei,  die  in der Regel einen
       anderen Namen tragt. 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 uberpruft  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 konnen Sie erkunden, wie  die  verschiedenen
       Feature-Test-Makros  abhangig von der Glibc-Version und welche explizit
       gesetzt werden. Die folgende Shell-Sitzung auf einem System  mit  Glibc
       2.10 zeigt einige Beispiele fur mogliche 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 _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 _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  Veroffentlichung  3.32  des  Projekts
       Linux-man-pages. Eine Beschreibung des Projekts und Informationen,  wie
       Fehler     gemeldet     werden     konnen,     finden     sich    unter
       http://www.kernel.org/doc/man-pages/.

"UBERSETZUNG

       Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard
       Schauer <Martin.E.Schauer@gmx.de> erstellt.

       Diese  Ubersetzung  ist  Freie Dokumentation; lesen Sie die GNU General
       Public  License  Version  3  oder  neuer   bezuglich   der   Copyright-
       Bedingungen. Es wird KEINE HAFTUNG ubernommen.

       Wenn  Sie  Fehler  in  der  Ubersetzung  dieser  Handbuchseite  finden,
       schicken     Sie     bitte     eine     E-Mail     an     <debian-l10n-
       german@lists.debian.org>.