feature test macros(7)
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
- define _GNU_SOURCE
- 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
- define _BSD_SOURCE
- 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
- 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
- include <stdint.h>
- include <stdio.h>
- include <unistd.h>
- include <stdlib.h>
int main(void) {
- ifdef _POSIX_SOURCE
printf("_POSIX_SOURCE defined\n");
- endif
- ifdef _POSIX_C_SOURCE
printf("_POSIX_C_SOURCE defined: %jdL\n", (intmax_t)_POSIX_C_SOURCE);
- endif
- ifdef _GNU_SOURCE
printf("_GNU_SOURCE defined\n");
- 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.