146

我正在使用 Big Nerd Ranch 的《Objective-C Programming》一书,它首先让我们在前几章中用 C 语言编写。在我创建的一个程序中,我使用了睡眠功能。在书中它告诉我把它放在#include <stdlib.h>下面#include <stdio.h>。这应该消除“函数'sleep'的隐式声明在C99中无效”的警告。但是由于某种原因,我放#include <stdlib.h>了之后,警告并没有消失。这个问题并没有阻止程序运行良好,但我只是好奇#include我需要使用哪个!

4

5 回答 5

194

sleep手册页说它是在<unistd.h>.

概要:

#include <unistd.h>

无符号整数睡眠(无符号整数秒);

于 2013-02-11T18:03:35.520 回答
79

sleep是一个非标准函数。

  • 在 UNIX 上,您应包括<unistd.h>.
  • 在 MS-Windows 上,Sleep相当来自<windows.h>.

在任何情况下,请检查文档。

于 2013-02-11T18:03:57.973 回答
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;
}
于 2014-04-18T17:34:34.303 回答
15

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

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

#include <unistd.h>
于 2013-02-11T18:04:47.077 回答
9

sleep(3)是在unistd.h,不是stdlib.h。在命令行上键入man 3 sleep以确认您的机器,但我假设您使用的是 Mac,因为您正在学习 Objective-C,而在 Mac 上,您需要unistd.h.

于 2013-02-11T18:04:00.323 回答