web-dev-qa-db-ja.com

「sleep」への未定義の参照ですが、<unistd.h>を含めました

まあ、これはばかげたものでなければなりません。以下は、Cで単純化できないコードです。「スリープへの未定義の参照」と言ってコンパイルすることはできません。しかし、私は必要なすべてのシステムヘッダーを含めると思います...

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

    return 1;
}
13
Mengfei Murphy

上部でこれを試してください:

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

このコードを使用すると、まったく同じことを行う2つの異なる関数を同じ名前で使用できます。また、さまざまなプラットフォームでコンパイルされます。

また、_(x)_引数を括弧で囲むと、誰かがこのsleep(10+10)のように呼び出した場合でも、遅延が正しくなります。

38
wazabit

Windowsオペレーティングシステムで実行している場合は、プログラムに_windows.h_ヘッダーファイルをインクルードし、sleep()Sleep()に変更します。

問題は消えるでしょう。

これがお役に立てば幸いです。

1
K Palaniswamy