[英]Compile simple C code in Visual Studio 2013
我正在嘗試在VS2013中編譯非常簡單的C代碼。 我事先做了一些谷歌搜索,我意識到我需要遵循一些步驟,例如,在項目屬性中將編譯器從“ Default
更改為“ Compile As C Code
。
問題是當我編譯以下代碼時:
#include <stdio.h>
main()
{
printf("Hello World! \n");
sleep(5);
}
我得到這些錯誤:
Error 1 error LNK2019: unresolved external symbol _sleep referenced in function _main
Error 2 error LNK1120: 1 unresolved externals
如果我將代碼更改為:
#include <stdio.h>
#include <Windows.h>
main()
{
printf("Hello World! \n");
Sleep(5000);
}
然后工作正常。
如何使我的第一個代碼成功編譯? 我在C中有一些經過測試的代碼,需要使用它們。 如果無法解決以上問題,則必須更新所有語法。
如何使我的第一個代碼成功編譯?
您不能(至少與您聲明的這段代碼完全一樣)。 關鍵是<stdio.h>
頭文件不提供sleep()
聲明,並且C標准要求,每個函數都需要在調用之前聲明。 就這么簡單。
第二件事是所需的sleep()
函數可能來自POSIX (特別是來自<unistd.h>
頭)。 但是,Visual Studio 2013 不兼容POSIX。 因此,解決方案是使用<Windows.h>
標頭中聲明的Sleep()
或其他可能的替代方法。
sleep
是一項非標准功能:
<unistd.h>
<windows.h>
除了編寫自己的代碼,沒有其他方法可以解決此問題:
void sleep (int seconds)
{
Sleep (seconds * 1000); // Converting to milliseconds
}
睡眠功能未在<stdio.h>
聲明。 如果您使用的是Unix,請使用unistd.h中的sleep()
,對於Windows,請使用Winbase.h(windows.h)中的Sleep()
)。 如果您想了解Sleep()
工作原理,那么可以看到在OS級別如何實現睡眠? 。
如果要執行此操作而不必將sleep()
更改為Sleep()
,則可以使用宏:
#define sleep(s) Sleep((s) * 1000)
宏是不好的,因此您可能不想在生產代碼中執行此操作,但是宏的優點是可以確保將其內聯,這將導致更快的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.