睡觉|警告隐式声明函数`sleep'?

时间:2016-08-26 00:38:50

标签: c windows sleep

我正在学习C. 在这个计划中 我使用睡眠功能来减慢倒计时。 我的教科书没有指定我应该包含的库以使用睡眠功能。 所以我使用它而不包括任何特殊的库,它的工作原理。 但是它在代码块中给了我这个警告信息。 我尝试包含<windows.h>,但仍会显示相同的警告消息。

  

警告D:\ Project \ C language \ trial8 \ trial8.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);
}

我想知道警告信息的含义是什么?它有多重要?有什么我应该做的吗?请注意,该程序仍然有效。

4 个答案:

答案 0 :(得分:5)

Windows没有sleep功能。相反,它有Sleep,它需要睡眠的毫秒数:

VOID WINAPI Sleep(
  _In_ DWORD dwMilliseconds
);

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

答案 1 :(得分:3)

函数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可能会在库的未来版本中更改。

答案 2 :(得分:2)

问题出在库(头文件)中:

Windows 上:

#include <windows.h>Sleep(1000); => 1000毫秒

Linux 上:

#include <unistd.h>sleep(1); => 1秒

答案 3 :(得分:0)

为了让它更跨平台,试试这个:

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