Qual é o #include adequado para a função 'sleep' em C?

124

Estou usando o livro Objective-C Programming, do Big Nerd Ranch, e ele começa nos escrevendo em C nos primeiros capítulos. Em um dos meus programas ele me criou, eu uso a função sleep. No livro, ele me disse para colocar #include <stdlib.h>sob o #include <stdio.h>papel. Isso deve se livrar do aviso que diz "Declaração implícita da função 'suspensão' é inválida em C99". Mas, por algum motivo, depois que eu coloquei #include <stdlib.h>, o aviso não desapareceu. Esse problema não impede que o programa funcione corretamente, mas eu estava curioso sobre o que #includeeu precisava usar!

trludt
fonte
3
mais uma por ser corajosa o suficiente para fazer a pergunta simples e me ajudar.
Mark Ch
1
Se você usar qualquer IDE principal (NetBeans, IntelliJ IDEA, Eclipse). digite o nome de qualquer função e, em seguida, Alt + Enter importará automaticamente a biblioteca que a possui.
T04435
2
@ T04435: As bibliotecas C não são importadas. O compilador não precisa deles. O ligador pode ligá-los, mas apenas após o compilador está feito . Em C, o compilador precisa de um protótipo de uma função para usar uma função. Os protótipos geralmente vêm nos arquivos de cabeçalho (.h).
alk

Respostas:

162

A página do manual sleep diz que está declarada em <unistd.h>.

Sinopse:

#include <unistd.h>

não assinado int sleep (não assinado int segundos);

simonc
fonte
1
Eu não tive! Obrigado! era apenas uma espécie de me incomodando, porque o livro disse que o <stdlib.h> iria se livrar do aviso ... estranho haha @simonc
trludt
1
Seria melhor usar a função sleep () ou time () para criar um atraso?
LandonZeKepitelOfGreytBritn
66

sleep é uma função não padrão.

  • No UNIX, você deve incluir <unistd.h>.
  • No MS-Windows, Sleepé bastante <windows.h>.

Em todos os casos, verifique a documentação.

md5
fonte
4
escreva o padrão C. wrt POSIX, é
ivotron 10/02
No UNIX, o sono realmente está em uso e leva microssegundos (milissegundos * 1000) em vez de segundos.
Agostino
6
Não use usleep: "4.3BSD, POSIX.1-2001. POSIX.1-2001 declara esta função obsoleta; use nanosleep (2). POSIX.1-2008 remove a especificação de usleep ()." linux.die.net/man/3/usleep
Jetski S-type
62

é isso que eu uso para um código de plataforma cruzada:

#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;
}
Romain VIOLLETTE
fonte
2
boa solução, útil
HCarrasko
15
usleep () foi removido no POSIX.1-2008. Use nanosleep (). linux.die.net/man/3/usleep
Jetski S-type
13

Pois sleep()deveria ser

#include <unistd.h>
alk
fonte
8

sleep(3)está dentro unistd.h, não stdlib.h. Digite man 3 sleepna linha de comando para confirmar a sua máquina, mas presumo que você esteja em um Mac desde que esteja aprendendo Objective-C, e em um Mac, você precisará unistd.h.

Carl Norum
fonte