Was ist das richtige #include für die Funktion 'sleep' in C?

124

Ich verwende das Big Nerd Ranch-Buch Objective-C Programming und es beginnt damit, dass wir in den ersten Kapiteln in C schreiben. In einem meiner von mir erstellten Programme verwende ich die Schlaffunktion. In dem Buch wurde mir gesagt, ich solle #include <stdlib.h>unter das #include <stdio.h>Teil setzen. Dies soll die Warnung beseitigen, die besagt, dass die implizite Deklaration der Funktion 'sleep' in C99 ungültig ist ". Aber aus irgendeinem Grund verschwindet #include <stdlib.h>die Warnung nicht, nachdem ich sie gesetzt habe . Dieses Problem hindert das Programm nicht daran, einwandfrei zu laufen, aber ich war nur neugierig, welche #includeich verwenden musste!

trludt
quelle
3
plus eins, weil ich mutig genug bin, die einfache Frage zu stellen und mir zu helfen.
Mark Ch
1
Wenn Sie eine Bürgermeister-IDE verwenden (NetBeans, IntelliJ IDEA, Eclipse). Geben Sie den Namen einer Funktion ein und drücken Sie Alt + Eingabetaste, um die Bibliothek, in der sie vorhanden ist, automatisch zu importieren.
T04435
2
@ T04435: In C werden Bibliotheken nicht importiert. Der Compiler ist nicht brauchen sie. Der Linker kann sie verknüpfen, jedoch erst, nachdem der Compiler fertig ist . In C benötigt der Compiler einen Prototyp einer Funktion, um eine Funktion verwenden zu können. Prototypen werden normalerweise in Header-Dateien (.h) geliefert.
Alk

Antworten:

162

Der Schlaf - man - Seite sagt , es erklärt in ist <unistd.h>.

Zusammenfassung:

#include <unistd.h>

vorzeichenloser int sleep (vorzeichenloser int Sekunden);

simonc
quelle
1
Ich hatte nicht! Danke dir! es hat mich nur irgendwie gestört, weil das Buch sagte, dass die <stdlib.h> die Warnung loswerden würde ... seltsam haha ​​@simonc
trludt
1
Wäre es besser, die Funktion sleep () oder time () zu verwenden, um eine Verzögerung zu erzeugen?
LandonZeKepitelOfGreytBritn
66

sleep ist eine nicht standardmäßige Funktion.

  • Unter UNIX müssen Sie einschließen <unistd.h>.
  • Unter MS-Windows Sleepist eher von <windows.h>.

Überprüfen Sie in jedem Fall die Dokumentation.

md5
quelle
4
Schreiben Sie den C-Standard. Für POSIX ist es
Ivotron
Unter UNIX schläft Sleep tatsächlich und es dauert Mikrosekunden (Millisekunden * 1000) anstelle von Sekunden.
Agostino
6
Verwenden Sie usleep nicht: "4.3BSD, POSIX.1-2001. POSIX.1-2001 erklärt diese Funktion für veraltet; verwenden Sie stattdessen nanosleep (2). POSIX.1-2008 entfernt die Spezifikation von usleep ()." linux.die.net/man/3/usleep
Jetski S-Typ
62

Folgendes verwende ich für einen plattformübergreifenden Code:

#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 VIOLLETTE
quelle
2
schöne Lösung, nützlich
HCarrasko
15
usleep () wurde in POSIX.1-2008 entfernt. Verwenden Sie nanosleep (). linux.die.net/man/3/usleep
Jetski S-Typ
13

Denn sleep()es sollte sein

#include <unistd.h>
alk
quelle
8

sleep(3)ist in unistd.h, nicht stdlib.h. Geben Sie man 3 sleepin Ihre Befehlszeile ein, um die Bestätigung für Ihren Computer zu erhalten. Ich gehe jedoch davon aus, dass Sie sich auf einem Mac befinden, da Sie Objective-C lernen, und auf einem Mac, den Sie benötigen unistd.h.

Carl Norum
quelle