C语言 睡眠时间|警告函数'sleep'的隐式声明?

jv4diomz  于 2022-12-11  发布在  其他
关注(0)|答案(5)|浏览(326)

我正在学习C语言。在这个程序中,我使用sleep函数来减慢倒计时。我的教科书中没有指定要使用sleep函数应该包含的库。所以我使用它,没有包含任何特殊的库。但是它在代码块中给我这个警告消息。我试图包含<windows.h>,但是仍然出现同样的警告消息。
警告D:\项目\C语言\试用版8\试用版8.c| 19|警告:函数'sleep'的隐式声明|
这是我的代码。

#include <stdio.h>
int main()
{
    int start;

    do
    {
        printf("Please enter the number to start\n");
        printf("the countdown (1 to 100):");
        scanf("%d",&start);
    }
    while(start<1 || start>100);

    do
    {
        printf("T-minus %d\n",start);
        start--;
        sleep(3000); 
    }
    while(start>0);
    printf("Zero!\n Go!\n");
    return(0);
}

我想知道警告消息是什么意思?它有多重要?我应该做些什么吗?请注意,程序无论如何都能工作。

eaf3rand

eaf3rand1#

问题出在库(头文件)中:
Windows 上:
#include <windows.h>Sleep(1000); =〉1000毫秒
Linux 上:
#include <unistd.h>sleep(1); =〉1秒

bf1o4zei

bf1o4zei2#

函数sleep不是C语言的一部分。因此,C编译器需要它的声明/原型,这样它就可以了解函数的参数数量及其数据类型和返回数据类型。当它找不到它时,它会创建该函数的Implicit Declaration
在Linux中,sleep有一个<unistd.h>的原型,而在windows中,还有另一个函数Sleep,它有一个<windows.h><synchapi.h>的原型。如果你在使用它之前明确地提供函数的原型,你总是可以通过包括头来摆脱。当你只需要头文件中的几个函数时,这是很有用的。
在Windows上用C语言编写的Sleep函数的原型是:

VOID WINAPI Sleep(_In_ DWORD dwMilliseconds);

请记住,通过包含适当的头文件或显式编写函数原型来提供所使用函数的原型始终是一种好的做法。即使不提供原型,编译器在大多数情况下只会抛出一个警告,并且它会做出一个假设,而在大多数情况下,这是您不希望看到的。最好包括头文件,因为API在库的未来版本中可能会更改。

jtoj6r0c

jtoj6r0c3#

Windows没有sleep函数,而是有Sleep,该函数休眠所需的毫秒数为:

VOID WINAPI Sleep(
  _In_ DWORD dwMilliseconds
);

您需要#include <windows.h>#include <synchapi.h>,具体取决于您运行的Windows版本。有关详细信息,请参阅MSDN

iszxjhcz

iszxjhcz4#

2022年更新:

正如Linux * 手册 * 页here中所述,我们需要包含unistd.h,并且应该可以适用于所有OS.

#include <stdio.h>
#include <unistd.h>

int main()
{

  sleep(1); /* sleep for 1 second*/
  printf("END\n");
  
  return 0;
}
ilmyapht

ilmyapht5#

要使其更跨平台,请尝试以下操作:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

相关问题