Что такое правильный #include для функции "sleep" в C?

Я использую книгу Big Nerd Ranch Objective-C Programming, и она начинается с того, что мы пишем на C в первых нескольких главах. В одной из моих программ я создаю, я использую функцию сна. В книге он велел мне поставить #include <stdlib.h> под #include <stdio.h> часть. Это должно избавиться от предупреждения, в котором говорится, что "неявное объявление функции"sleep" недопустимо в C99". Но почему-то после того, как я поставил #include <stdlib.h> предупреждение не уходит.. Эта проблема не останавливает программу от бега нормально, но мне было просто любопытно, на каком #include мне нужно использовать!

5 ответов


сон man page говорит, что он объявлен в <unistd.h>. Вы включили это в свою программу?


sleep - это нестандартная функция.

  • в UNIX вы должны включить <unistd.h>.
  • на MS-Windows,Sleep С <windows.h>.

в каждом случае проверьте документацию.


это то, что я использую для кросс-платформенного кода:

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

на sleep() он должен быть!--3-->

#include <unistd.h>

sleep(3) находится в unistd.h, а не stdlib.h. Тип man 3 sleep в командной строке для подтверждения вашей машины, но я предполагаю, что вы находитесь на Mac, так как вы изучаете Objective-C, и на Mac вам нужно unistd.h.