Perché gcc non riesce a trovare l'interfaccia random() quando -std=c99 è impostato?

 C Programming >> Programmazione C >  >> Tags >> GCC
Perché gcc non riesce a trovare l'interfaccia random() quando -std=c99 è impostato?


Faccio "#include <stdlib.h>" nella parte superiore della sorgente.


Esempio di compilazione:


/usr/bin/colorgcc -std=c99 -fgnu89-inline  -g -Wall -I/usr/include -I./ -I../ -I../../ -I../../../ -I../../../../    -O3 -o f8  f8.c
In file included from f8.c:7:
ctype-cmp.c: In function ‘randomized’:
ctype-cmp.c:48: warning: implicit declaration of function ‘random’
ctype-cmp.c: In function ‘main’:
ctype-cmp.c:153: warning: implicit declaration of function ‘srandom’
[email protected]:t$

Quando spengo -std=c99, la funzione isfinite() non può essere trovata. Quindi voglio usare -std=c99 per questo e altri motivi. C'è qualche trucco che mi sfugge?


Risposte:


man srandom dice che la funzione non parte di C99 ma parte di POSIX.


Attiva _BSD_SOURCE o _XOPEN_SOURCE >= 500 o qualsiasi altra macro di test di funzionalità adatta che dichiari la funzione srandom/random (vedi man feature_test_macros e man srandom ).


Questo ha buone possibilità, ma devi anche capire le macro che sono definite/non definite implicitamente leggendo le manpage sopra.


/usr/bin/colorgcc -std=c99 -D_XOPEN_SOURCE=600 -fgnu89-inline -g -Wall 
-I/usr/include -I./ -I../ -I../../ -I../../../ -I../../../../ -O3 -o f8 f8.c