2012-04-07 25 views
18
gcc (GCC) 4.6.3 
c89 

Estoy tratando de usar usleep. Sin embargo, me siguen dando la siguiente advertencia:declaración implícita de la función usleep

declaración implícita de la función usleep

He incluido el archivo de cabecera unistd.h.

Las páginas de manualidades mencionan algo sobre esto. Pero no estoy seguro de entenderlo:

usleep(): 
    Since glibc 2.12: 
     _BSD_SOURCE || 
      (_XOPEN_SOURCE >= 500 || 
       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && 
      !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) 
    Before glibc 2.12: 
     _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED 

Pero no estoy seguro de qué hacer con lo anterior?

+7

La sugerencia de que se ha perdido se encuentra en la misma página del manual que ha copiado el texto anterior: 'POSIX.1-2001 declara esta función obsoleta; use nanosleep (2) en su lugar. POSIX.1-2008 elimina la especificación de usleep(). 'Así que ves que hay una intención detrás del hecho de que sea tan difícil de acceder. Simplemente no lo use en el nuevo código. –

Respuesta

24

Esa lista son las condiciones previas para tener definido usleep. Básicamente es una expresión tipo C que involucra variables #define que tiene que ser cierta antes de incluir el archivo de encabezado.

El archivo de encabezado solo definirá usleep dentro de lo que normalmente es un nido masivo de declaraciones #ifdef y los desarrolladores se han tomado el tiempo para decirte lo que tienes que hacer para no tener que pasar horas intentando figurar por ti mismo :-)

Suponiendo que estés usando un glibc 2.12 o mejor, significa que o bien tienen que:

  • declarar _BSD_SOURCE; o
  • declaro una combinación complicada de otras tres cosas, que no me molestaré en descifrar.

Probablemente la solución más fácil es simplemente compilar con gc -D _BSD_SOURCE o poner:

#define _BSD_SOURCE 

en el código antes de incluir el archivo de cabecera que le da usleep.

Es probable que desee definir estos antes de incluye en caso de que existan dependencias entre los diversos archivos de encabezado.

+1

Gracias que funcionó. En realidad, tuve que declarar _BSD_SOURCE antes que cualquier otro incluye. De lo contrario, seguía dándome la misma advertencia. Mi versión glibc glibc-2.14.90-24.fc16.6.x86_64. – ant2009

+0

@ ant2009, sí, es probable, ya que puede haber dependencias entre los encabezados. Añadiré eso a la respuesta. – paxdiablo

+0

@paxdiablo mi cadena de herramientas se queja de que 'warning '_BSD_SOURCE y _SVID_SOURCE están en desuso, use _DEFAULT_SOURCE" ', así que supongo que en algunos casos' _BSD_SOURCE' no soluciona el problema –

17

Esto puede funcionar: Agregue -std=gnu99 al compilar con gcc en Linux.

Ejemplo:

arm-linux-gcc -lpthread -std=gnu99 -o test ArmLinuxDataPipe1.2.1.c 
+0

Esto! Diciendo -std = c99 recibirás una advertencia. – teroi

Cuestiones relacionadas