2012-04-07 22 views
18
gcc (GCC) 4.6.3 
c89 

私はusleepを使用しようとしています。私はunistd.hヘッダファイルが含まれている関数の暗黙の宣言

はusleep関数の

暗黙的な宣言:しかし、私は次の警告を取得しておきます。

マニュアルページにはこれに関する記述があります。しかし、私はそれで理解しているか分からない:

usleep(): 
    Since glibc 2.12: 
     _BSD_SOURCE || 
      (_XOPEN_SOURCE >= 500 || 
       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && 
      !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) 
    Before glibc 2.12: 
     _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED 

しかし私は上記と何をするべきか分からないのですか?

+7

あなたは上記のテキストコピーした同じmanページにあり逃した提案: 'POSIX.1-2001は、この機能は廃止を宣言し、代わりにnanosleep(2)を使用してください。 POSIX.1-2008ではusleep()の仕様が削除されています。したがって、アクセスが難しいという事実の背後にある意図があることがわかります。新しいコードでは使用しないでください。 –

答えて

24

このリストは、usleepが定義されているための前提条件です。これは、基本的にC言語のような表現で、ヘッダファイルをインクルードする前に真でなければならない#defineという変数です。

ヘッダーファイル自体は通常ステートメントの大規模なネスト内に定義され、開発者はあなたが何をする必要があるかを教えて時間を費やすことなく、あなたが使用していると仮定すると、

:-)自分でそれアウトはglibc 2.12以上は、それはあなたのいずれかをしなければならないことを意味:

  • 宣言_BSD_SOURCE。または
  • という3つの複雑な組み合わせを宣言しますが、これは解読することはありません。

    #define _BSD_SOURCE 
    

    コードで、あなたがあなたのusleepを与えるヘッダーファイルをインクルードする前に:

は、おそらく最も簡単な修正は単にgc -D _BSD_SOURCEでコンパイルするか、置くことです。

より前にこれらを定義したい場合は、にはさまざまなヘッダーファイル間に依存関係がある場合があります。

+1

ありがとうございました。実際には、他のインクルードの前に_BSD_SOURCEを宣言しなければなりませんでした。さもなければそれは私に同じ警告を与え続けた。私のglibcバージョンglibc-2.14.90-24.fc16.6.x86_64。 – ant2009

+0

@ ant2009、それはヘッダー間の依存関係がある可能性が高いためです。私はそれを答えに加えます。 – paxdiablo

+0

@paxdiablo私のtoolchainは '_BSD_SOURCEと_SVID_SOURCEが警告され、_DEFAULT_SOURCEは' '使用されなくなると不満を表明しているので、' _BSD_SOURCE'は問題を解決しないと仮定します。 –

17

これは動作する可能性があります:-std=gnu99をLinuxでgccでコンパイルするときに追加します。

例:

arm-linux-gcc -lpthread -std=gnu99 -o test ArmLinuxDataPipe1.2.1.c 
+0

これ! -std = c99と言ったら、警告が表示されます。 – teroi