Provided by: manpages-de_1.4-1_all bug

BEZEICHNUNG

       feature_test_macros - Feature-Test-Makros

ÜBERSICHT

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

   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. Einzelheiten
       finden Sie weiter unten.

       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
       Im Folgenden wird erläutert, 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:

              •  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 Definitionen gemäß der POSIX.1-2001
                 Base Specification (ohne die XSI-Erweiterung).

              •  (Seit Glibc 2.10) Der Wert 200809L oder größer aktiviert 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.

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

       _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 größer zugewiesen wird.

       _ISOC95_SOURCE
              Aktiviert »ISO C (1990) Amendment 1«-Definitionen (auch bekannt als C95). Dieses Makro  wird  seit
              Glibc  2.12  erkannt.  Die  hauptsächliche  Änderung  in C95 war die Unterstützung internationaler
              Zeichensätze. Die Änderungen von C95 wurden in den nachfolgenden  Standard  C99  aufgenommen  (mit
              anderen Worten impliziert _ISOC99_SOURCE _ISOC95_SOURCE).

       _ISOC99_SOURCE
              Aktiviert  C99-Ergänzungen  zu  ISO  C (1990). Dieses Makro wird seit Glibc 2.1.3 erkannt; frühere
              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
              Abwärtskompatibilität unterstützt.

       _ISOC11_SOURCE
              Aktiviert  Deklarationen,  die  mit  dem  ISO-C11-Standard konsistent sind. Dieses Makro wird seit
              Glibc 2.16 erkannt.

       _LARGEFILE64_SOURCE
              Expose definitions for the alternative  API  specified  by  the  LFS  (Large  File  Summit)  as  a
              "transitional  extension"  to  the  Single  UNIX Specification. (See http://opengroup.org/platform
              /lfs.html) The alternative API consists of a set of new objects (i.e., functions and types)  whose
              names  are  suffixed  with "64" (e.g., off64_t versus off_t, lseek64()  versus lseek(), etc.). New
              programs should not employ this interface; instead _FILE_OFFSET_BITS=64 should be employed.

       _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 nützlich für die Ein-/Ausgabe in und aus großen Dateien (> 2 Gigabyte) auf
              32-Bit-Systemen. (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
              Die Zuweisung eines beliebigen Wertes für 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 für 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 größer 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).  Darüber  hinaus  werden  verschiedene GNU-spezifische Erweiterungen aktiviert. Widersprüche
              zwischen Standards werden unter Ausschluss von BSD-Funktionen gelöst.

       _REENTRANT
              Die  Definition  dieses  Makros  aktiviert   bestimmte   wiedereintrittsfähige   Funktionen.   Für
              Multithread-fähige Programm verwenden Sie stattdessen cc -pthread.

       _THREAD_SAFE
              Synonym  für  _REENTRANT;  wird  für  die  Kompatibilität  mit  einigen  anderen Implementierungen
              bereitgestellt.

       _FORTIFY_SOURCE (seit Glibc 2.3.4)
              Die Definition dieses Makros bewirkt, dass  einige  einfache  Kontrollen  für  die  Erkennung  von
              Pufferüberlauffehlern.  Diese  Fehler  können  bei  der  Verwendung  diverser  Funktionen  für die
              Manipulation von Zeichenketten und Speicher auftreten. Es werden nicht  alle  Pufferüberlauffehler
              erkannt  werden,  nur einige der häufigsten Fälle. Die aktuelle Implementierung enthält Kontrollen
              für  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
              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 und führen zu Compiler-Warnungen, andere Kontrollen
              finden zur Laufzeit statt und führen zu einem Laufzeitfehler, wenn  die  Überprüfung  fehlschlägt.
              Der  Compiler  muss die Verwendung dieses Makros unterstützen, was für gcc(1) seit Version 4.0 der
              Fall ist.

   Standarddefinitionen, implizite Definitionen und Kombinationsdefinitionen
       Ohne explizit definierte  Feature-Test-Makros  werden  standardmäßig  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).

       If   any   of   __STRICT_ANSI__,   _ISOC99_SOURCE,   _POSIX_SOURCE,    _POSIX_C_SOURCE,    _XOPEN_SOURCE,
       _XOPEN_SOURCE_EXTENDED,  _BSD_SOURCE,  or  _SVID_SOURCE  is  explicitly  defined,  then  _BSD_SOURCE, and
       _SVID_SOURCE are not defined by default.

       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, XOPEN_SOURCE mit einem Wert kleiner als 500 definiert ist;

                •  199506L,  XOPEN_SOURCE  mit  einem  Wert größer oder gleich 500 und kleiner als 600 definiert
                   ist; oder

                •  (Seit Glibc 2.4) 200112L, XOPEN_SOURCE mit einem Wert größer oder gleich 600 und kleiner  als
                   700 definiert ist.

                •  (Seit  Glibc  2.4) 200809L, wenn 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.

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

       This  page  is  part  of  release  3.54 of the Linux man-pages project. A description of the project, and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.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>.

Linux                                              2012-08-05                             FEATURE_TEST_MACROS(7)