我试图在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中有一些测试代码,我需要使用它们。如果我不能解决上述问题,那么我必须更新所有的语法。
发布于 2015-08-04 23:48:26
睡眠不是C标准函数。
如果您是在UNIX系统上,则包括<unistd.h>。但是,如果您是在windows系统上,则应该使用<windows.h> (这就是为什么您的第二个版本的代码成功编译的原因)。
如果您想在这两个系统中使用,请尝试如下(来自这里):
#ifdef __linux__
//linux include code goes here
#elif _WIN32
// windows include code goes here
#else
#endif发布于 2015-08-04 23:45:56
sleep是一个非标准函数:
<unistd.h><windows.h>除了编写自己的代码之外,没有其他方法可以解决这一问题:
void sleep (int seconds)
{
Sleep (seconds * 1000); // Converting to milliseconds
}发布于 2015-08-04 23:48:29
在<stdio.h>中没有声明睡眠函数。如果您在unix上,请使用unistd.h中的sleep()或Winbase.h (windows.h)中的Sleep()。如果您想了解Sleep()是如何工作的,您可以看到如何在操作系统级别实现睡眠?。
如果要在不需要将sleep()更改为Sleep()的情况下执行此操作,则可以使用宏:
#define sleep(s) Sleep((s) * 1000)
宏是不好的,所以您可能不想在生产代码中这样做,但是宏的优点是它将保证内联,这将导致更快的代码。
https://stackoverflow.com/questions/31821159
复制相似问题