2013-02-11 132 views
68

我正在使用Big Nerd Ranch的Objective-C編程,它首先讓我們在前幾章中用C編寫。在我創建的一個程序中,我使用了睡眠功能。在書中,它告訴我把#include <stdlib.h>置於#include <stdio.h>部分。這應該是擺脫了這樣的警告:「隱式聲明的函數'sleep'在C99中無效」。但由於某種原因,我把#include <stdlib.h>後,警告並沒有消失..這個問題並沒有停止程序運行良好,但我只是好奇我需要使用哪個#includeC中函數'sleep'的正確#include是什麼?

+1

加上一個是勇敢地問一個簡單的問題,並幫助我。 – 2016-01-11 07:36:00

+1

如果您使用任何市長IDE(NetBeans,IntelliJ IDEA,Eclipse)。鍵入任何函數的名稱,然後按Alt + Enter鍵將自動導入包含它的庫。 – T04435 2016-03-08 07:39:05

回答

88

睡眠man page表示它在<unistd.h>中聲明。你有沒有把它包含在你的程序中?

+0

我沒有!謝謝!它只是有點困擾我,因爲這本書說會擺脫警告......怪異哈哈@simonc – trludt 2013-02-11 18:05:39

+0

使用sleep()函數或time()來創建延遲會更好嗎? – LandonZeKepitelOfGreytBritn 2017-05-19 17:27:16

36

sleep是一個非標準功能。

  • 在UNIX上,應包含<unistd.h>
  • 在MS-Windows上,Sleep來自<windows.h>

在任何情況下,請檢查文檔。

+1

w.r.t. C標準。 w.r.t. POSIX,它是 – ivotron 2014-02-10 18:48:48

+0

在UNIX上,Sleep實際上是休眠狀態,它需要幾微秒(毫秒* 1000)而不是秒。 – Agostino 2017-02-06 14:59:25

4

sleep(3)unistd.h而不是stdlib.h。在您的命令行中輸入man 3 sleep以確認您的機器,但我認爲您在Mac上學習Objective-C後在Mac上,而在Mac上,您需要unistd.h

10

對於sleep()應該

#include <unistd.h> 
32

這是我使用的跨平臺代碼:

#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

不錯的解決方案,很有用 – HCarrasko 2015-10-20 12:16:48

相關問題