2014-02-07 51 views
0

我正在寫一個C大學項目,我想在我的頭文件中使用Sleep()函數。標記它的人可能正在使用Linux,我正在開發VS2013 for Windows。我發現Sleep()存在於兩個不同的頭文件中,具體取決於編譯器是使用Windows還是Linux,我已經瀏覽過網頁,並發現在預處理器中使用"#ifdef"的建議。不過,我對預處理器的工作很陌生,所以當我有很多不同的建議時,我不確定要使用什麼,但我不確定這些建議是否與我的目的相同,所以如果這是一個常見問題,請致歉題。我已經試過如下:無法使用不同的編譯器來使用特定的頭文件?

#ifdef _WIN32 || _WIN64 
#include<windows.h> 
#elif __linux 
#include<unistd.h> 
#else 
#include<unistd.h> 
#endif 

這將編譯在VS2013罰款,但我得到Sleep()在Linux機器上的錯誤,所以我使用似乎並沒有工作代碼VS2013之外。有人可以解釋爲了讓Windows和Linux使用它們各自的頭文件需要指定什麼嗎?

+2

sleep()被定義,但我不認爲睡眠()被定義(在linux上)。 –

+1

小心睡眠窗口以毫秒爲參數,而unistd以秒爲參數。 – smani

回答

3

Linux函數名爲sleep(),小寫字母,但Windows版本號爲Sleep(),大寫字母S.並且C區分大小寫。而且,Windows Sleep()以毫秒爲參數,而Linux替代使用秒數。

因此,像這樣要求:

#ifdef _WIN32 || _WIN64 
#include<windows.h> 
#define sleep(x) Sleep((x) * 1000) 
#elif __linux 
#include<unistd.h> 
#else 
#include<unistd.h> 
#endif 

或者,如果你願意,你可以做其他方式,但你必須精確度的問題。 (如果這是個問題,請考慮使用nanosleep())。

+0

感謝您的建議,正如我所說我不使用Linux,所以我不知道unistd.h版本的格式,但我明天會在Linux系統上測試這個,然後回答這個問題。 – kmahon99