Quel est le #include approprié pour la fonction 'sleep' en C?


124

J'utilise le livre Objective-C Programming de Big Nerd Ranch, et cela commence par nous faire écrire en C dans les premiers chapitres. Dans l'un de mes programmes qu'il me fait créer, j'utilise la fonction de sommeil. Dans le livre, il m'a dit de mettre #include <stdlib.h>sous la #include <stdio.h>partie. Ceci est censé éliminer l'avertissement qui dit "La déclaration implicite de la fonction 'sleep' n'est pas valide en C99". Mais pour une raison quelconque après avoir mis #include <stdlib.h>, l'avertissement ne disparaît pas .. Ce problème n'empêche pas le programme de bien fonctionner, mais j'étais juste curieux de savoir sur quoi #includeje devais l'utiliser!


3
plus un pour avoir été assez courageux pour poser la question simple et m'aider.
Mark Ch

1
Si vous utilisez n'importe quel IDE de maire (NetBeans, IntelliJ IDEA, Eclipse). tapez le nom de n'importe quelle fonction, puis Alt + Entrée il importera automatiquement la bibliothèque qui l'a.
T04435

2
@ T04435: Dans les bibliothèques C ne sont pas importées. Le compilateur n'en a pas besoin. L'éditeur de liens peut les lier, mais seulement une fois le compilateur terminé . En C, le compilateur a besoin d'un prototype de fonction pour utiliser une fonction. Les prototypes sont généralement fournis dans des fichiers d' en- tête (.h).
alk

Réponses:


163

La page de manuel de sommeil indique qu'il est déclaré dans <unistd.h>.

Synopsis:

#include <unistd.h>

unsigned int sleep (unsigned int secondes);


1
Je n'avais pas! Je vous remercie! ça me dérangeait un peu, parce que le livre disait que <stdlib.h> se débarrasserait de l'avertissement ... bizarre haha ​​@simonc
trludt

1
Serait-il préférable d'utiliser la fonction sleep () ou time () pour créer un délai?
LandonZeKepitelOfGreytBritn

66

sleep est une fonction non standard.

  • Sous UNIX, vous devez inclure <unistd.h>.
  • Sur MS-Windows, Sleepc'est plutôt de <windows.h>.

Dans tous les cas, consultez la documentation.


4
par rapport à la norme C. wrt POSIX, il est
ivotron

Sous UNIX, Sleep est en fait usleep et cela prend des microsecondes (millisecondes * 1000) au lieu de secondes.
Agostino

6
N'utilisez pas usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 déclare cette fonction obsolète; utilisez à la place nanosleep (2). POSIX.1-2008 supprime la spécification de usleep ()." linux.die.net/man/3/usleep
Jetski S-type

62

voici ce que j'utilise pour un code multiplateforme:

#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;
}

2
belle solution, utile
HCarrasko

15
usleep () a été supprimé dans POSIX.1-2008. Utilisez nanosleep (). linux.die.net/man/3/usleep
Jetski S-type

13

Car sleep()ça devrait être

#include <unistd.h>

8

sleep(3)est dedans unistd.h, non stdlib.h. Tapez man 3 sleepsur votre ligne de commande pour confirmer votre machine, mais je suppose que vous êtes sur un Mac depuis que vous apprenez Objective-C, et sur un Mac, vous en avez besoin unistd.h.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.