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 Programme hat es mich angelegt, ich nutze die Sleep-Funktion. In dem Buch sagte es mir zu setzen #include <stdlib.h>
unter dem #include <stdio.h>
Teil. Dies soll die Warnung beseitigen, die besagt, dass “Implizite Deklaration der Funktion ‘sleep’ in C99 ungültig ist”. Aber aus irgendeinem Grund, nachdem ich gesetzt habe #include <stdlib.h>
die Warnung verschwindet nicht.. Dieses Problem hindert das Programm nicht daran, gut zu laufen, aber ich war nur neugierig auf welches #include
Ich musste verwenden!
Was ist das richtige #include für die Funktion ‘sleep()’?
trludt
Simonc
Der Schlaf Manpage sagt, es ist deklariert in <unistd.h>
.
Zusammenfassung:
#include <unistd.h>
unsigned int sleep (unsigned int Sekunden);
-
Ich hatte nicht! Vielen Dank! es hat mich nur irgendwie gestört, weil das Buch sagte, dass die
die Warnung loswerden würde … komisch, haha @simonc – trludt
11. Februar 2013 um 18:05 Uhr
-
Wäre es besser, die Funktion sleep() oder time() zu verwenden, um eine Verzögerung zu erzeugen?
– LandonZeKepitelOfGreytBritn
19. Mai 2017 um 17:27 Uhr
-
@LandonZeKepitelOfGreytBritn: Zumindest die C-Funktion
time()
tut nicht erstellte eine Verzögerung, zumindest keine gut definierte Verzögerung, basierend auf den übergebenen Argumenten.– alk
10. September 2020 um 10:08 Uhr
sleep
ist eine Nicht-Standard-Funktion.
- Unter UNIX müssen Sie einschließen
<unistd.h>
. - Unter MS-Windows,
Sleep
ist eher aus<windows.h>
.
Überprüfen Sie in jedem Fall die Dokumentation.
-
bzgl. des C-Standards. bzgl. POSIX ist es
– Ivotron
10. Februar 2014 um 18:48 Uhr
-
Unter UNIX ist Sleep tatsächlich usleep und dauert Mikrosekunden (Millisekunden * 1000) anstelle von Sekunden.
– Agostino
6. Februar 2017 um 14:59 Uhr
-
Verwenden Sie nicht usleep: “4.3BSD, POSIX.1-2001. POSIX.1-2001 erklärt diese Funktion für obsolet; verwenden Sie stattdessen nanosleep(2). POSIX.1-2008 entfernt die Spezifikation von usleep().” linux.die.net/man/3/usleep
– Jetski S-Typ
6. Juni 2018 um 8:03 Uhr
-
Windows
Sleep()
und POSIX’sleep()
sind nicht das Gleiche. Sie nehmen unterschiedliche Argumente. Ersteres dauert Millisekunden, letzteres Sekunden!– alk
10. September 2020 um 10:06 Uhr
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;
}
-
usleep() wurde in POSIX.1-2008 entfernt. Verwenden Sie nanosleep(). linux.die.net/man/3/usleep
– Jetski S-Typ
6. Juni 2018 um 8:06 Uhr
alk
Was ist das richtige #include für die Funktion ‘sleep()’?
sleep()
ist nicht Standard C, aber POSIX, also sollte es sein:
#include <unistd.h>
Karl Norum
sleep(3)
ist in unistd.h
nicht stdlib.h
. Typ man 3 sleep
in Ihrer Befehlszeile, um für Ihren Computer zu bestätigen, aber ich nehme an, Sie sind auf einem Mac, da Sie Objective-C lernen, und auf einem Mac benötigen Sie unistd.h
.
Wenn Sie eine größere IDE (NetBeans, IntelliJ IDEA, Eclipse) verwenden. Geben Sie den Namen einer beliebigen Funktion ein, dann Alt + Eingabetaste, um die Bibliothek, die sie enthält, automatisch zu importieren.
– T04435
8. März 2016 um 7:39 Uhr
@T04435: In C werden Bibliotheken nicht importiert. Der Compiler tut es nicht brauche sie. Der Linker könnte verlinken sie, aber nur nach der Compiler ist erledigt. In C der Compiler braucht einen Prototyp einer Funktion, um eine Funktion zu verwenden. Typischerweise kommen Prototypen herein Header-Dateien (.h).
– alk
1. Juli 2018 um 11:32 Uhr