2013-02-11 6 views
68

Ich benutze die Big Nerd Ranch Buch Objective-C-Programmierung, und es beginnt damit, dass wir in den ersten paar Kapiteln in C schreiben. In einem meiner Programme habe ich es erstellt, ich benutze die Schlaffunktion. Im Buch hat es mir gesagt, #include <stdlib.h> unter dem #include <stdio.h> Teil zu setzen. Dies soll die Warnung loswerden, die besagt, dass "Implizite Deklaration der Funktion 'Schlaf' in C99 ungültig ist". Aber aus irgendeinem Grund, nachdem ich #include <stdlib.h> gesetzt habe, geht die Warnung nicht weg .. Dieses Problem hört das Programm nicht auf, gut zu laufen, aber ich war gerade neugierig, welches #include ich verwenden musste!Was ist der richtige #Include für die Funktion 'Schlaf' in C?

+1

plus eines für die einfache Frage stellen mutig genug zu sein und mir helfen. –

+1

Wenn Sie eine größere IDE verwenden (NetBeans, IntelliJ IDEA, Eclipse). Geben Sie den Namen einer Funktion ein, und drücken Sie dann die Tastenkombination Alt + Eingabe, um die Bibliothek, in der sie enthalten ist, automatisch zu importieren. – T04435

Antwort

88

Der Schlaf man page sagt, dass es in <unistd.h> erklärt wird. Hast du das in dein Programm aufgenommen?

+0

Ich hatte nicht! Vielen Dank! Es störte mich nur, weil das Buch sagte, dass die würde die Warnung loswerden ... seltsam haha ​​@simonc – trludt

+0

Wäre es besser, die sleep() -Funktion oder Zeit() zu verwenden, um eine Verzögerung zu erstellen? – LandonZeKepitelOfGreytBritn

36

sleep ist eine Nicht-Standard-Funktion.

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

In jedem Fall überprüfen Sie die Dokumentation.

+1

w.r.t. der C-Standard. w.r. POSIX, es ist – ivotron

+0

Unter UNIX schläft Sleep tatsächlich und es dauert Mikrosekunden (Millisekunden * 1000) statt Sekunden. – Agostino

4

sleep(3) ist in unistd.h, nicht stdlib.h. Geben Sie in Ihrer Befehlszeile man 3 sleep ein, um Ihren Computer zu bestätigen, aber ich nehme an, Sie befinden sich auf einem Mac, seit Sie Objective-C gelernt haben, und auf einem Mac benötigen Sie unistd.h.

10

Für sleep() sollte es

#include <unistd.h> 
32

das ist das, was ich für einen Cross-Plattform-Code verwenden:

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

nette Lösung, nützlich – HCarrasko

Verwandte Themen