5 Вопрос: Что такое #include для функции 'sleep' в C?

вопрос создан в Sat, Mar 9, 2013 12:00 AM

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

    
95
  1. плюс один за то, что вы достаточно смелы, чтобы задать простой вопрос и помочь мне.
    2016-01-11 07: 36: 00Z
  2. Если вы используете любую IDE мэра (NetBeans, IntelliJ IDEA, Eclipse). введите имя любой функции, затем нажмите Alt + Enter, чтобы автоматически импортировать имеющуюся библиотеку.
    2016-03-08 07: 39: 05Z
  3. @ T04435: библиотеки C не импортируются. Компилятор не нуждается в них. Компоновщик может связать их, но только после компилятора done . В Си компилятору нужен прототип функции, чтобы использовать функцию. Прототипы обычно находятся в заголовочных файлах (.h).
    2018-07-01 11: 32: 08Z
5 ответов                              5                         

На странице сна man говорится, что она объявлена ​​в <unistd.h>.

    
118
2019-01-29 18: 34: 21Z
  1. У меня не было! Спасибо! меня это просто беспокоило, потому что в книге говорилось, что < stdlib.h > избавился бы от предупреждения ... странный ха-ха @simonc
    2013-02-11 18: 05: 39Z
  2. Было бы лучше использовать функцию sleep () или time () для создания задержки?
    2017-05-19 17: 27: 16Z

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

  • В UNIX вы должны включить <unistd.h>.
  • В MS-Windows Sleep скорее, чем <windows.h>.

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

    
53
2013-02-11 18: 03: 57Z
  1. w.r.t. стандарт С w.r.t. POSIX, это
    2014-02-10 18: 48: 48Z
  2. В UNIX Sleep фактически находится в режиме сна, и вместо секунд он занимает микросекунды (миллисекунды * 1000).
    2017-02-06 14: 59: 25Z
  3. Не используйте usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 объявляет эту функцию устаревшей; вместо этого используйте nanosleep (2) . POSIX.1-2008 удаляет спецификацию usleep (). " linux.die .net /человек /3 /USleep
    2018-06-06 08: 03: 43Z

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

 
#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;
}
    
50
2014-04-18 17: 34: 34Z
  1. хорошее решение, полезное
    2015-10-20 12: 16: 48Z
  2. usleep () был удален в POSIX.1-2008. Используйте nanosleep (). linux.die.net/man/3/usleep
    2018-06-06 08: 06: 18Z

Для sleep() это должно быть

 
#include <unistd.h>
    
13
2013-02-11 18: 04: 47Z

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

    
6
2013-02-11 18: 53: 37Z
источник размещен Вот