函数'sleep()'的正确#include是什么?

156
我正在使用《Objective-C编程》这本大脑壳养成计划的书,最初的几章让我们用 C 语言写程序。在我创建的一个程序中,我使用了 sleep 函数。书中告诉我要在 #include <stdio.h> 部分下添加 #include <stdlib.h> 来消除 "在 C99 中隐式声明函数'sleep'是无效的" 警告。但是,不知何故,当我添加了#include <stdlib.h> 后,警告并没有消失... 这个问题并不会影响程序正常运行,但我只是想知道需要使用哪个#include

1
如果您使用任何主要的IDE(NetBeans,IntelliJ IDEA,Eclipse),输入任何函数的名称,然后按Alt+Enter,它将自动导入具有该函数的库。 - T04435
2
在C语言中,不需要导入库文件。编译器不需要它们。链接器可能会链接它们,但只有在编译器完成后才会这样做。在C语言中,编译器需要函数的原型才能使用该函数。原型通常包含在头文件(.h)中。 - alk
6个回答

209

睡眠man页面中说明了它在<unistd.h>中声明。

概要:

#include <unistd.h>

unsigned int sleep(unsigned int seconds);


1
我没有这样做!谢谢你!只是有点困扰,因为书上说<stdlib.h>会消除警告...很奇怪哈哈 @simonc - trludt
1
使用sleep()函数还是time()函数来创建延迟更好呢? - LandonZeKepitelOfGreytBritn
@LandonZeKepitelOfGreytBritn:至少C函数time()不会创建延迟,至少不是基于传递的参数定义的延迟。 - alk

82

sleep是一个非标准函数。

  • 在UNIX系统中,你需要包含<unistd.h>
  • 在MS-Windows系统中,Sleep函数在<windows.h>中。

无论哪种情况,请务必查看相关文档。


4
针对 C 标准而言。就 POSIX 而言,它是... - ivotron
在UNIX系统中,Sleep实际上是usleep,并且它接受微秒(毫秒*1000)而不是秒。 - Agostino
8
不要使用usleep函数:4.3BSD、POSIX.1-2001都已经宣布该函数已过时,应该使用nanosleep(2)替代。POSIX.1-2008移除了对usleep()的规范说明。 - Jetski S-type
1
Windows的Sleep()和POSIX的sleep()不同的。它们接受不同的参数。前者以毫秒为单位,后者以秒为单位! - alk

72

这是我用来进行跨平台编程的代码:

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

int main()
{
  pollingDelay = 100
  //do stuff

  //sleep:
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* sleep for 100 milliSeconds */
  #endif

  //do stuff again
  return 0;
}

22
usleep()在POSIX.1-2008中已被删除。使用nanosleep()代替。https://linux.die.net/man/3/usleep - Jetski S-type

16

'sleep()'函数的适当#include是什么?

sleep()不是标准C,而是POSIX,所以应该使用:

#include <unistd.h>

9

sleep(3)unistd.h中,而不是stdlib.h。如果您使用的是Mac系统学习Objective-C,则需要使用unistd.h库。请在命令行中键入man 3 sleep以确认您的机器信息。


1

鉴于sleep是一个非标准函数,我使用标准库time.h创建了一个sleep函数。

#include <time.h>

void sleep(double s) {
    time_t cur_time = time(NULL);
    while ((difftime(time(NULL), cur_time)) < s);
}

1
将CPU放入While-Loop循环并不是睡眠!睡眠函数是为了让CPU真正进入睡眠状态并节省电力,而您的函数恰恰相反。希望这样说得清楚。 - Heider Sati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接