2013-02-11 18 views
68

Używam podręcznika Big Nerd Ranch Objective-C, a zaczyna się od napisania w C kilku pierwszych rozdziałów. W jednym z moich programów mam go tworzyć, korzystam z funkcji spania. W książce kazano mi umieścić #include <stdlib.h> pod częścią #include <stdio.h>. Ma to na celu pozbycie się ostrzeżenia, które brzmi: "Uśpione" deklaracja funkcji "jest nieprawidłowa w C99". Ale z jakiegoś powodu po tym, jak wstawiam #include <stdlib.h>, ostrzeżenie nie zniknie. Ten problem nie zatrzymuje programu, który działa dobrze, ale byłem po prostu ciekawy, który numer #include muszę użyć!Co to jest poprawne #include dla funkcji "sleep" w C?

+1

plus jeden za to, że odważył się zadać proste pytanie i pomaga mi. –

+1

Jeśli używasz dowolnego burmistrza IDE (NetBeans, IntelliJ IDEA, Eclipse). wpisz nazwę dowolnej funkcji, a następnie Alt + Enter automatycznie ją zaimportuje do biblioteki, która ją posiada. – T04435

Odpowiedz

88

Uśpienie man page mówi, że jest zadeklarowane w <unistd.h>. Czy uwzględniłeś to w swoim programie?

+0

Nie miałem! Dziękuję Ci! po prostu przeszkadzało mi to, ponieważ książka powiedziała, że ​​ pozbyłoby się ostrzeżenia ... dziwne haha ​​@simonc – trludt

+0

Czy byłoby lepiej użyć funkcji uśpienia() lub czasu(), aby utworzyć opóźnienie? – LandonZeKepitelOfGreytBritn

36

sleep to niestandardowa funkcja.

  • W systemie UNIX należy podać <unistd.h>.
  • Na MS-Windows, Sleep jest raczej z <windows.h>.

W każdym przypadku sprawdź dokumentację.

+1

w.r.t. standard C. w.r.t. POSIX, jest to – ivotron

+0

W systemie UNIX tryb uśpienia jest rzeczywiście uśpiony i zajmuje on mikrosekundy (milisekundy * 1000) zamiast sekund. – Agostino

4

sleep(3) jest w unistd.h, a nie stdlib.h. Wpisz man 3 sleep w linii poleceń, aby potwierdzić, że masz maszynę, ale zakładam, że używasz Macintosha, ponieważ uczysz się Objective-C, a na komputerze Mac potrzebujesz unistd.h.

10

Dla sleep() powinno być

#include <unistd.h> 
32

to co używam do kodu cross-platformowej:

#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

fajne rozwiązanie, przydatne – HCarrasko