Sí, hay un truco que se echa en falta: se puede usar en lugar de -std=gnu99
-std=c99
.
-std=c99
#define
s __STRICT_ANSI__
, que /usr/include/features.h
interpreta como "no permitir que nada fuera de la norma C por defecto" (sin ella, se obtiene al menos tanto _SVID_SOURCE
y _BSD_SOURCE
). -std=gnu99
, por otro lado, significa "extensiones C99 plus GNU" (el valor predeterminado de gcc es actualmente -std=gnu89
, su equivalente C89, por lo que debe especificar algo para obtener las nuevas características C99).
Como alternativa, puede habilitar las macros de prueba de características (como se menciona en la respuesta de @ litb). Mirando /usr/include/stdlib.h
en mi sistema, espera uno de __USE_SVID
, __USE_XOPEN_EXTENDED
, o __USE_BSD
. /usr/include/features.h
me dice que las macros de prueba de funciones que permitan a estos son:
_SVID_SOURCE
(permite __USE_SVID
)
_BSD_SOURCE
(permite __USE_BSD
)
_XOPEN_SOURCE
con un valor de al menos 500
(permite __USE_XOPEN_EXTENDED
)
_XOPEN_SOURCE_EXTENDED
(también permite __USE_XOPEN_EXTENDED
)
_GNU_SOURCE
(Permite todo, incluyendo las macros de prueba de cuatro características anteriores)
Para los nuevos programas en los que usted no está demasiado preocupado por los posibles conflictos de nombres con las nuevas funciones de las futuras normas, utilizando tanto -std=gnu99
y -D_GNU_SOURCE
es una buena idea.Le permite usar todas las nuevas características estándar y extensiones de GNU, lo que combinado con algún tipo de respaldo (por ejemplo, autoconf
-pruebas de características de estilo) brinda la mayor flexibilidad.
Referencias:
tuviera que votar en contra de esta respuesta correcta desde el encabezado del fueron incluidos (tanto stdlib y matemática). El truco fue definir la macro. ¡Gracias por la respuesta! – SetJmp
No vi que hubieras mencionado math.h – dirkgently
Como C noob total, aprecié la mención de 'srand' al menos. ¡Gracias! – jocull