C에서 'sleep'함수에 대한 적절한 #include는 무엇입니까?


124

저는 Big Nerd Ranch의 Objective-C Programming이라는 책을 사용하고 있으며 처음 몇 장에서 C로 작성하는 것으로 시작합니다. 내 프로그램 중 하나에서 내가 만든 수면 기능을 사용합니다. 책에서는 그 부분 #include <stdlib.h>아래 에 두라고했습니다 #include <stdio.h>. 이것은 "함수 'sleep'의 암시 적 선언은 C99에서 유효하지 않습니다."라는 경고를 제거하기위한 것입니다. 근데 무슨 이유에서인지를 #include <stdlib.h>붙여도 경고가 사라지지 않습니다.이 문제는 프로그램이 잘 돌아가는 것을 막지는 못하지만 어떤 #include것을 사용 해야하는지 궁금했습니다 !


3
간단한 질문을하고 나를 도울 수있을만큼 용감 해져서 하나 더.
Mark Ch

1
시장 IDE (NetBeans, IntelliJ IDEA, Eclipse)를 사용하는 경우. 함수의 이름을 입력 한 다음 Alt + Enter를 누르면 해당 함수가있는 라이브러리를 자동으로 가져옵니다.
T04435

2
@ T04435 : C에서 라이브러리를 가져 오지 않습니다. 컴파일러는 그것들이 필요 하지 않습니다 . 링커 이들을 링크 할 있지만 컴파일러가 완료된 후에 만 가능 합니다 . C에서 컴파일러 는 함수를 사용하기 위해 함수 의 프로토 타입필요 합니다. 프로토 타입은 일반적으로 헤더 파일 (.h)로 제공됩니다.
알크

답변:


163

sleep man 페이지<unistd.h>.

개요:

#include <unistd.h>

unsigned int sleep (unsigned int 초);


1
나는하지 않았다! 감사합니다! 책에서 <stdlib.h>가 경고를 제거 할 것이라고 말했기 때문에 그것은 단지 나를 괴롭 혔습니다. 이상한 haha ​​@simonc
trludt

1
지연을 생성하기 위해 sleep () 함수 또는 time ()을 사용하는 것이 더 낫습니까?
LandonZeKepitelOfGreytBritn

66

sleep 비표준 기능입니다.

  • UNIX에서는 <unistd.h>.
  • MS-Windows에서 Sleep에서 오히려입니다 <windows.h>.

모든 경우에 문서를 확인하십시오.


4
wrt C 표준. wrt POSIX, 그것은
ivotron

UNIX에서 Sleep은 실제로 usleep이며 초가 아닌 마이크로 초 (밀리 초 * 1000)가 걸립니다.
Agostino

6
usleep을 사용하지 마십시오 : "4.3BSD, POSIX.1-2001. POSIX.1-2001은이 함수를 쓸모 없게 선언합니다. 대신 nanosleep (2)를 사용하십시오. POSIX.1-2008은 usleep ()의 사양을 제거합니다." linux.die.net/man/3/usleep
Jetski 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 2015-10-20

15
usleep ()은 POSIX.1-2008에서 제거되었습니다. nanosleep ()을 사용하십시오. linux.die.net/man/3/usleep
Jetski S-type

13

들어 sleep()는해야한다

#include <unistd.h>

8

sleep(3)unistd.h아니라에 stdlib.h있습니다. man 3 sleep명령 줄에 입력 하여 컴퓨터를 확인하지만 Objective-C를 배우는 중이므로 Mac을 사용하고 있고 Mac에서는 unistd.h.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.