Sì, c'è un trucco ti manca: è possibile utilizzare al posto di -std=gnu99
-std=c99
.
-std=c99
#define
s __STRICT_ANSI__
, che /usr/include/features.h
interpreta come "non attivare nulla al di fuori dello standard C di default" (senza di essa, si ottiene almeno sia _SVID_SOURCE
e _BSD_SOURCE
). -std=gnu99
, d'altra parte, significa "C99 plus GNU extensions" (l'impostazione predefinita di gcc è attualmente -std=gnu89
, l'equivalente C89, motivo per cui è necessario specificare qualcosa per ottenere le nuove funzionalità di C99).
In alternativa, è possibile abilitare i macro test di funzionalità (come indicato nella risposta di @ litb). Guardando a /usr/include/stdlib.h
nel mio sistema, si aspetta uno di __USE_SVID
, __USE_XOPEN_EXTENDED
o __USE_BSD
. /usr/include/features.h
mi dice che le macro funzione di test che consentano questi sono:
_SVID_SOURCE
(abilita __USE_SVID
)
_BSD_SOURCE
(abilita __USE_BSD
)
_XOPEN_SOURCE
con un valore di almeno 500
(abilita __USE_XOPEN_EXTENDED
)
_XOPEN_SOURCE_EXTENDED
(abilita anche __USE_XOPEN_EXTENDED
)
_GNU_SOURCE
(Consente tutto, comprese le quattro funzionalità macro di prova di cui sopra)
Per i nuovi programmi in cui non siete troppo preoccupati per potenziali collisioni nome con nuove funzioni da standard futuri, utilizzando sia -std=gnu99
e -D_GNU_SOURCE
è una buona idea.Ti consente di utilizzare tutte le nuove funzionalità standard e le estensioni GNU, che combinate con una sorta di fallback (ad esempio, i test delle funzionalità di stile) offrono la massima flessibilità.
Riferimenti:
ho dovuto votare su questa risposta dal corretto colpo di testa sono stati inclusi (entrambi stdlib e matematica). Il trucco stava definendo la macro. Grazie per la risposta! – SetJmp
Non ho visto che hai citato math.h – dirkgently
In totale C noob, ho apprezzato la menzione di 'srand' almeno. Grazie! – jocull