feature test macros(7)

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

feature_test_macros(7)

Miscellaneous Information Manual

NAMN

feature_test_macros - makron för funktionstest

BESKRIVNING

Funktionsmakron för funktionstest låter programmerare kontrollera vilka definitioner som exponeras i systemets headerfiler vid kompilering.

OBS: För att vara effektiva måste funktionsmakron definieras innan några headerfiler inkluderas. Detta kan göras antingen genom kompilationskommandot, till exempel: ```bash cc -DMACRO=value ``` eller genom att definiera makrot direkt i källkoden innan några headers inkluderas: ```c

  1. define _GNU_SOURCE
  2. include <xyz.h>

``` Vissa makron används för att skapa portabla applikationer genom att undvika icke-standardiserade definitioner, medan andra makron möjliggör åtkomst till specifika, icke-standardiserade funktioner.

Specifikation av funktionsmakron i manualer

När en funktion kräver ett specifikt funktionsmakro beskrivs detta i manualens SYNOPSIS. Exempel från manualen för `acct(2)`: ```c Feature Test Macro Requirements for glibc (see feature_test_macros(7)): acct(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500) ``` I detta fall kan funktionen nås genom att definiera: ```c

  1. define _BSD_SOURCE
  2. define _XOPEN_SOURCE // Med ett värde mindre än 500

``` Alternativt kan detta specificeras i kompilationskommandot: ```bash cc -D_BSD_SOURCE cc -D_XOPEN_SOURCE=499 ```

Funktionsmakron som stöds av glibc

Makron som används ofta i modern källkod:

  • `_POSIX_C_SOURCE` - För POSIX-definitioner
  • `_XOPEN_SOURCE` - För SUS-definitioner
  • `_GNU_SOURCE` - För GNU-specifika funktioner
  • `_DEFAULT_SOURCE` - För standarddefinitioner
        1. Exempel på makrons effekter

Makron som påverkar vilka definitioner som inkluderas:

  • `_POSIX_C_SOURCE`:
 - 199309L: Real-tidsförlängningar
 - 199506L: Trådhantering
 - 200112L: POSIX.1-2001-standard
  • `_XOPEN_SOURCE`:
 - 500: SUSv2
 - 600: SUSv3 och C99
 - 700: SUSv4 och POSIX.1-2008

Makron som bör undvikas i ny kod:

  • `_BSD_SOURCE` och `_SVID_SOURCE` (ersätts av `_DEFAULT_SOURCE`).

STANDARDER

POSIX.1 specificerar makron som `_POSIX_C_SOURCE`, `_POSIX_SOURCE`, och `_XOPEN_SOURCE`.

HISTORIA

Makrot `_XOPEN_SOURCE_EXTENDED` specificerades först i XPG4v2 (SUSv1) men är inte en del av senare versioner som SUSv2.

EXEMPEL

Ett exempelprogram som visar hur olika funktionsmakron påverkar kompileringsmiljön: ```c

  1. include <stdint.h>
  2. include <stdio.h>
  3. include <unistd.h>
  4. include <stdlib.h>

int main(void) {

  1. ifdef _POSIX_SOURCE
   printf("_POSIX_SOURCE defined\n");
  1. endif
  2. ifdef _POSIX_C_SOURCE
   printf("_POSIX_C_SOURCE defined: %jdL\n", (intmax_t)_POSIX_C_SOURCE);
  1. endif
  2. ifdef _GNU_SOURCE
   printf("_GNU_SOURCE defined\n");
  1. endif
   return 0;

} ``` Exempel på användning: ```bash cc -D_XOPEN_SOURCE=500 program.c ./a.out ```

SE ÄVEN

COLOPHON

Denna sida är en del av man-pages-projektet (Linux kärna och C-biblioteks användardokumentation). För mer information, besök [1](https://www.kernel.org/doc/man-pages/).

Sidslut

Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man7/feature_test_macros.7.html
PHP


Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till PC Service som har sponsrat Linux.se med webbhotell.