146

私はBigNerdRanchの本Objective-CProgrammingを使用しています。それは、最初の数章でCで書くことから始まります。私が作成したプログラムの1つでは、スリープ機能を使用しています。その本の中で、それは私に#include <stdlib.h>その部分の下に置くように言った#include <stdio.h>。これは、「関数'sleep'の暗黙の宣言はC99では無効です」という警告を取り除くことになっています。でも、なんらかの理由#include <stdlib.h>で、警告が消えません。この問題でプログラムが正常に動作しなくなるわけではありませんが、どちら#includeを使用する必要があるのか​​興味がありました。

4

5 に答える 5

194

スリープマンページには、で宣言されていると記載されてい<unistd.h>ます。

あらすじ:

#include <unistd.h>

unsigned int sleep(unsigned int seconds);

于 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してマシンを確認しますが、Objective-Cを学習しているので、Macを使用していると思います。Macでは、が必要unistd.hです。

于 2013-02-11T18:04:00.323 に答える