2013-02-11 10 views
68

Sto usando il libro Big Nerd Ranch Objective-C Programming, e inizia facendoci scrivere in C nei primi capitoli. In uno dei miei programmi mi ha creato, io uso la funzione sleep. Nel libro mi è stato detto di inserire #include <stdlib.h> nella parte #include <stdio.h>. Questo dovrebbe eliminare l'avviso che dice "La dichiarazione implicita della funzione 'sleep' non è valida in C99". Ma per qualche ragione dopo aver inserito #include <stdlib.h>, l'avviso non scompare .. Questo problema non impedisce al programma di funzionare correttamente, ma ero solo curioso di sapere quale #include avevo bisogno di usare!Qual è il giusto #include per la funzione "sleep" in C?

+1

più uno per essere abbastanza coraggiosi da chiedere al semplice domanda e mi hanno aiutato. –

+1

Se si utilizza un sindaco IDE (NetBeans, IntelliJ IDEA, Eclipse). digitare il nome di qualsiasi funzione, quindi Alt + Invio lo importerà automaticamente la libreria che lo ha. – T04435

risposta

88

Il sonno man page dice che è dichiarato in <unistd.h>. Hai inserito questo nel tuo programma?

+0

Non l'avevo! Grazie! era solo tipo di infastidirmi, perché il libro diceva che il si sarebbe sbarazzato dell'avvertimento ... strano haha ​​@simonc – trludt

+0

Sarebbe meglio usare la funzione sleep() o time() per creare un ritardo? – LandonZeKepitelOfGreytBritn

36

sleep è una funzione non standard.

  • Su UNIX, è necessario includere <unistd.h>.
  • Su MS-Windows, Sleep è piuttosto da <windows.h>.

In ogni caso, consultare la documentazione.

+1

w.r.t. lo standard C w.r.t. POSIX, è – ivotron

+0

Su UNIX, Sleep è effettivamente addormentato e impiega microsecondi (millisecondi * 1000) anziché secondi. – Agostino

4

sleep(3) è in unistd.h, non stdlib.h. Digita man 3 sleep sulla tua riga di comando per confermare la tua macchina, ma presumo che tu sia su un Mac poiché stai imparando Objective-C, e su un Mac, hai bisogno di unistd.h.

10

Per sleep() dovrebbe essere

#include <unistd.h> 
32

questo è quello che io uso un codice cross-platform:

#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

bella soluzione, utile – HCarrasko