Qual è il #include corretto per la funzione "sleep" in C?


124

Sto usando il libro di Big Nerd Ranch Objective-C Programming, e inizia facendoci scrivere in C nei primi capitoli. In uno dei miei programmi mi ha fatto creare, io uso la funzione sleep. Nel libro mi diceva di mettere #include <stdlib.h>sotto la #include <stdio.h>parte. Questo dovrebbe eliminare l'avviso che dice "La dichiarazione implicita della funzione 'sleep' non è valida in C99". Ma per qualche motivo dopo che ho messo #include <stdlib.h>, l'avviso non scompare .. Questo problema non impedisce al programma di funzionare bene, ma ero solo curioso su quale #includedovevo usare!


3
più uno per essere stato abbastanza coraggioso da porre la semplice domanda e aiutarmi.
Mark Ch,

1
Se utilizzi un IDE sindaco (NetBeans, IntelliJ IDEA, Eclipse). digita il nome di qualsiasi funzione, quindi Alt + Invio importerà automaticamente la libreria che lo possiede.
T04435

2
@ T04435: In C le librerie non vengono importate. Il compilatore non ne ha bisogno. Il linker potrebbe collegarli, ma solo dopo il compilatore è fatto . In C il compilatore ha bisogno di un prototipo di una funzione per usare una funzione. I prototipi in genere vengono forniti in file di intestazione (.h).
alk

Risposte:


163

La pagina man sleep dice che è dichiarato in <unistd.h>.

Sinossi:

#include <unistd.h>

unsigned int sleep (unsigned int secondi);


1
Io non ho avuto! Grazie! mi dava fastidio, perché il libro diceva che <stdlib.h> si sarebbe sbarazzato dell'avvertimento ... strano haha ​​@simonc
trludt

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

66

sleep è una funzione non standard.

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

In ogni caso, controlla la documentazione.


4
rispetto allo standard C. rispetto a POSIX, è
ivotron

Su UNIX, lo stato di sospensione è effettivamente attivo e impiega microsecondi (millisecondi * 1000) invece di secondi.
Agostino

6
Non usare usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 dichiara questa funzione obsoleta; usa invece nanosleep (2). POSIX.1-2008 rimuove la specifica di usleep ()." linux.die.net/man/3/usleep
Jetski S-type

62

questo è quello che uso per un codice multipiattaforma:

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

2
bella soluzione, utile
HCarrasko

15
usleep () è stato rimosso in POSIX.1-2008. Usa nanosleep (). linux.die.net/man/3/usleep
Jetski S-type

13

Perché sleep()dovrebbe essere

#include <unistd.h>

8

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.