【问题标题】:What is the proper #include for the function 'sleep()'?函数“sleep()”的正确#include 是什么?
【发布时间】:2013-01-26 21:43:56
【问题描述】:

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

【问题讨论】:

  • 如果您使用任何市长 IDE(NetBeans、IntelliJ IDEA、Eclipse)。键入任何函数的名称,然后 Alt+Enter 它将自动导入具有它的库。
  • @T04435:在 C 库中未导入。编译器确实需要它们。链接器可能链接它们,但只有在编译器完成之后。在 C 中,编译器需要一个函数的原型才能使用函数。原型通常出现在 头文件 (.h) 中。

标签: c posix sleep


【解决方案1】:

睡眠man page 表示它在<unistd.h> 中声明。

简介:

#include <unistd.h>

unsigned int sleep(unsigned int seconds);

【讨论】:

  • 我没有!谢谢!这让我有点困扰,因为这本书说 会摆脱警告......很奇怪哈哈@simonc
  • 使用 sleep() 函数还是 time() 来创建延迟会更好吗?
  • @LandonZeKepitelOfGreytBritn:至少 C 函数 time() 确实不会根据传递的参数创建一个延迟,至少不是一个明确定义的延迟。
【解决方案2】:

sleep 是一个非标准函数。

  • 在 UNIX 上,您应包括 &lt;unistd.h&gt;
  • 在 MS-Windows 上,Sleep 来自 &lt;windows.h&gt;

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

【讨论】:

  • w.r.t. C标准。 w.r.t. POSIX,它是
  • 在 UNIX 上,Sleep 实际上是 usleep,它需要微秒(毫秒*1000)而不是秒。
  • 不要使用 usleep:"4.3BSD,POSIX.1-2001。POSIX.1-2001 声明此函数已过时;改用 nanosleep(2)。POSIX.1-2008 删除usleep() 的规范。” linux.die.net/man/3/usleep
  • Windows 的 Sleep() 和 POSIX 的 sleep()相同。他们采取不同的论点。前者需要几毫秒,后者需要几秒钟!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    #include <unistd.h>
    

    【讨论】:

      【解决方案5】:

      这是我用于跨平台代码的:

      #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;
      }
      

      【讨论】:

      猜你喜欢
      • 2012-12-06
      • 2016-10-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多