Неопределенная ссылка на «сон», но я включил <unistd.h> - PullRequest
12 голосов
/ 07 января 2012

Ну, это должно быть глупо. Ниже приведен код, который не может быть проще в C. Он не может быть скомпилирован, говоря «неопределенная ссылка на сон». Но я думаю, что я включаю весь системный заголовок, который мне нужен ...

#include <stdio.h>
#include <unistd.h>
int main()
{
    printf("Test starts.\n");
    sleep(1);
    printf("Test ends.\n");

    return 1;
}

Ответы [ 2 ]

35 голосов
/ 07 января 2012

Попробуйте это наверху:

#ifdef __unix__
# include <unistd.h>
#elif defined _WIN32
# include <windows.h>
#define sleep(x) Sleep(1000 * (x))
#endif

Этот код позволит вам использовать две разные функции под одним и тем же именем, которые делают одно и то же.И он компилируется на разных платформах.

Кроме того, заключенный в скобки аргумент (x) гарантирует, что задержка правильная, даже если кто-то называет это так sleep(10+10)

1 голос
/ 02 февраля 2013

Если вы работаете в операционной системе Windows, включите заголовочный файл windows.h в свою программу и измените sleep() на Sleep().

Проблема исчезнет.

Надеюсь, это поможет.

...