簡體   English   中英

在Visual Studio 2013中編譯簡單的C代碼

[英]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()或其他可能的替代方法。

睡眠不是C標准功能。

如果您在UNIX系統上,請包括<unistd.h> 但是,如果您使用的是Windows系統,則該文件應位於<windows.h> (這就是第二版代碼可以成功編譯的原因。

如果要在兩個系統中都使用,請嘗試以下類似操作(從此處開始 ):

#ifdef __linux__ 
    //linux include code goes here
#elif _WIN32
    // windows include code goes here
#else

#endif

sleep是一項非標准功能:

  • 在UNIX上,使用<unistd.h>
  • 在MS-Windows上,使用<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM