¿Cuál es el #include adecuado para la función 'dormir' en C?

124

Estoy usando el libro Objective-C Programming de Big Nerd Ranch, y comienza haciendo que escribamos en C en los primeros capítulos. En uno de mis programas que me hizo crear, utilizo la función de suspensión. En el libro me decía que pusiera #include <stdlib.h>debajo del #include <stdio.h>papel. Se supone que esto elimina la advertencia que dice "La declaración implícita de la función 'sleep' no es válida en C99". Pero por alguna razón después de que lo puse #include <stdlib.h>, la advertencia no desaparece. Este problema no impide que el programa se ejecute bien, ¡pero solo tenía curiosidad sobre cuál #includenecesitaba usar!

trludt
fuente
3
más uno por ser lo suficientemente valiente para hacer una pregunta simple y ayudarme.
Mark Ch
1
Si usa cualquier IDE mayor (NetBeans, IntelliJ IDEA, Eclipse). escriba el nombre de cualquier función, luego Alt + Enter importará automáticamente la biblioteca que la tiene.
T04435
2
@ T04435: En C, las bibliotecas no se importan. El compilador no los necesita. El vinculador puede vincularlos, pero solo después de que el compilador haya terminado . En C, el compilador necesita un prototipo de una función para usar una función. Los prototipos suelen venir en archivos de encabezado (.h).
Alk

Respuestas:

163

La página del manual de sueño dice que está declarado en formato <unistd.h>.

Sinopsis:

#include <unistd.h>

unsigned int sleep (unsigned int segundos);

Simonc
fuente
1
¡No había! ¡Gracias! Me estaba molestando un poco, porque el libro decía que <stdlib.h> eliminaría la advertencia ... raro jaja @simonc
trludt
1
¿Sería mejor usar la función sleep () o time () para crear un retraso?
LandonZeKepitelOfGreytBritn
66

sleep es una función no estándar.

  • En UNIX, deberá incluir <unistd.h>.
  • En MS-Windows, Sleepes más bien de <windows.h>.

En todos los casos, consulte la documentación.

md5
fuente
4
wrt el estándar C. wrt POSIX, es
ivotron
En UNIX, Sleep es en realidad us sleep y tarda microsegundos (milisegundos * 1000) en lugar de segundos.
Agostino
6
No use usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 declara esta función obsoleta; use nanosleep (2) en su lugar. POSIX.1-2008 elimina la especificación de usleep ()". linux.die.net/man/3/usleep
Jetski S-type
62

esto es lo que uso para un código multiplataforma:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

int main()
{
  pollingDelay = 100
  //do stuff

  //sleep:
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* sleep for 100 milliSeconds */
  #endif

  //do stuff again
  return 0;
}
Romain VIOLETA
fuente
2
buena solución, útil
HCarrasko
15
usleep () se eliminó en POSIX.1-2008. Utilice nanosleep (). linux.die.net/man/3/usleep
Jetski S-type
13

Porque sleep()debería ser

#include <unistd.h>
alk
fuente
8

sleep(3)está en unistd.h, no stdlib.h. Escriba man 3 sleepen su línea de comando para confirmar para su máquina, pero supongo que está en una Mac ya que está aprendiendo Objective-C, y en una Mac, lo necesita unistd.h.

Carl Norum
fuente