Cの関数「sleep」の適切な#includeは何ですか?


124

私はBig Nerd Ranchの本であるObjective-Cプログラミングを使用しており、最初の数章でCを書くことから始めます。私が作成したプログラムの1つで、スリープ機能を使用しています。その本の中で、私#include <stdlib.h>#include <stdio.h>パートの下に置くように私に言いました。これは、「C99では関数 'sleep'の暗黙の宣言は無効です」という警告を取り除くことになっています。しかし、を置いた後の何らかの理由#include <stdlib.h>で、警告は消えません..この問題はプログラムの正常な実行を停止しませんが、#include使用する必要があることに興味を持っていました!


3
加えて、簡単な質問をするのに十分な勇気があり、私を助けてくれたことに対する1つ。
Mark Ch '11年

1
市長IDE(NetBeans、IntelliJ IDEA、Eclipse)を使用する場合。関数の名前を入力し、Alt + Enterを押すと、その関数を含むライブラリが自動インポートされます。
T04435 2016年

2
@ T04435:Cのライブラリはインポートされません。コンパイラはそれらを必要としませ。リンカそれらをリンクするかもしれませんが、コンパイラが完了した後でのみです。Cでは、コンパイラー関数を使用するために関数のプロトタイプ必要とします。プロトタイプは通常、ヘッダーファイル(.h)に入っています。
アルク

回答:


162

sleepのmanページには、で宣言されていると記載されてい<unistd.h>ます。

あらすじ:

#include <unistd.h>

unsigned int sleep(unsigned int seconds);


1
私はしていませんでした!ありがとうございました!この本は<stdlib.h>が警告を取り除くと言っていたので、それはちょっと私を悩ませていました...奇妙なハハ@simonc
trludt

1
遅延を作成するには、sleep()関数またはtime()を使用する方が良いでしょうか?
LandonZeKepitelOfGreytBritn 2017年

66

sleep 非標準関数です。

  • UNIXでは、を含めます<unistd.h>
  • MS-Windowsでは、Sleepむしろから<windows.h>です。

いずれの場合も、ドキュメントを確認してください。


4
C標準について。
wrt

UNIXでは、Sleepは実際にはusleepであり、数秒ではなくマイクロ秒(ミリ秒* 1000)かかります。
Agostino 2017

6
usleepを使用しないでください:「4.3BSD、POSIX.1-2001。POSIX.1-2001はこの関数を廃止することを宣言しています。代わりにnanosleep(2)を使用してください。POSIX.1-2008はusleep()の仕様を削除しています。」 linux.die.net/man/3/usleep
S-type

62

これは私がクロスプラットフォームのコードに使用するものです:

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

2
便利なソリューション
HCarrasko

15
usleep()はPOSIX.1-2008で削除されました。nanosleep()を使用してください。linux.die.net/man/3/usleep
S-type


8

sleep(3)であるunistd.h、ではありませんstdlib.hman 3 sleepコマンドラインに入力してマシンを確認しますが、Objective-Cを学習しているのでMacを使用していると思いますが、Macにはが必要unistd.hです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.