Quando lo fai
#define _XOPEN_SOURCE <some number>
o
cc -D_XOPEN_SOURCE=<some number>
dice al compilatore di includere definizioni per alcune funzioni extra definite negli standard X / Open e POSIX.
Questo ti darà alcune funzionalità extra che esistono sui più recenti sistemi UNIX / BSD / Linux, ma probabilmente non esistono su altri sistemi come Windows.
I numeri si riferiscono a diverse versioni dello standard.
Puoi dire quale ti serve (se esiste) guardando la pagina man per ogni funzione che chiami.
Ad esempio, man strdup
dice:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Ciò significa che dovresti mettere uno di questi:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
all'inizio del file sorgente prima di eseguire qualsiasi #include
s se si desidera utilizzare strdup
.
Oppure potresti mettere
#define _GNU_SOURCE
lì invece, che abilita tutte le funzionalità, con il rovescio della medaglia che potrebbe non essere compilabile su Solaris, FreeBSD, Mac OS X, ecc.
È una buona idea controllare ogni pagina di manuale prima di fare un #include
, #define
o usare una nuova funzione, perché a volte il loro comportamento cambia a seconda delle opzioni e dei messaggi di posta #define
elettronica che hai, ad esempio con basename (3) .
Guarda anche: