153 votes

Quelle est la bonne instruction #include pour la fonction 'sleep()' ?

Je suis en train d'utiliser le livre Big Nerd Ranch Objective-C Programming, et il commence par nous faire écrire en C dans les premiers chapitres. Dans l'un de mes programmes, on me demande de créer, j'utilise la fonction sleep. Dans le livre, on m'a dit de mettre #include sous la partie #include . Cela est censé se débarrasser du avertissement disant "Déclaration implicite de la fonction 'sleep' est invalide en C99". Mais pour une raison quelconque, après avoir mis #include , l'avertissement ne disparaît pas.. Ce problème n'empêche pas le programme de fonctionner correctement, mais j'étais juste curieux de savoir quel #include je devais utiliser!

1 votes

Si vous utilisez un IDE majeur (NetBeans, IntelliJ IDEA, Eclipse), tapez le nom d'une fonction, puis appuyez sur Alt+Enter pour importer automatiquement la bibliothèque qui la contient.

2 votes

@T04435: En C, les bibliothèques ne sont pas importées. Le compilateur n'en a pas besoin. Le lien peut les lier, mais seulement après que le compilateur ait terminé. En C, le compilateur a besoin d'un prototype d'une fonction pour utiliser une fonction. Les prototypes se trouvent généralement dans des fichiers d'en-tête (.h).

205voto

simonc Points 30279

La page de man de sommeil dit qu'il est déclaré dans .

Synopsis:

#include 

unsigned int sleep(unsigned int seconds);

1 votes

Je n'avais pas ! Merci! cela me dérangeait un peu, parce que le livre indiquait que le se débarrasserait de l'avertissement... bizarre haha @simonc

1 votes

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

0 votes

@LandonZeKepitelOfGreytBritn: Au moins la fonction C time() ne crée pas de retard, du moins pas un retard bien défini, en fonction des arguments passés.

82voto

md5 Points 14957

dormir est une fonction non standard.

  • Sous UNIX, vous devez inclure .
  • Sous MS-Windows, Sleep est plutôt dans .

Dans tous les cas, consultez la documentation.

4 votes

En ce qui concerne la norme C. en ce qui concerne POSIX, c'est

0 votes

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

8 votes

Ne pas utiliser usleep : "4.3BSD, POSIX.1-2001. POSIX.1-2001 déclare cette fonction obsolète ; utilisez plutôt nanosleep(2). POSIX.1-2008 supprime la spécification de usleep()." linux.die.net/man/3/usleep

72voto

Ce que j'utilise pour un code multiplateforme :

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

int main()
{
  pollingDelay = 100
  //faire quelque chose

  //dormir :
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* dormir pendant 100 millisecondes */
  #endif

  //faire quelque chose à nouveau
  return 0;
}

22 votes

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

16voto

alk Points 26509

Quel est le bon #include pour la fonction 'sleep()'?

sleep() n'est pas du C standard, mais du POSIX donc cela devrait être :

#include

9voto

Carl Norum Points 114072

sleep(3) se trouve dans unistd.h, pas dans stdlib.h. Tapez man 3 sleep sur votre ligne de commande pour confirmer pour votre machine, mais je présume que vous êtes sur un Mac puisque vous apprenez l'Objective-C, et sur un Mac, vous avez besoin de unistd.h.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X