-1

プロジェクトで使用clock_gettime()しています。cppしかしclock_gettime()、このスコープエラーで宣言されていません。明らかに、他の誰かが既に をインクルードしているtime.hため、このエラーが予想されます。しかし、どうすれば前方宣言できclock_gettime()ますか? 私は試しましたint clock_gettime(int,struct timespec *)か?

http://linux.die.net/man/3/clock_gettime、宣言は次のとおりです。 int clock_gettime(clockid_t clk_id, struct timespec *tp);

4

2 に答える 2

2

ライブラリ関数を自分で宣言しても意味がありません。clock_gettime() 宣言されていtime.hます。ここで「ヒット」していると思うのはglibc、デフォルトで標準の C 関数のみが表示されることです。それ以外の場合 (たとえばPOSIXの場合などclock_gettime())、実際に宣言を取得するには、対応するマクロを定義する必要があります。gcc選択したモードに応じて、いくつかのマクロに対して自動的にそれを行います (例: -std=gnu99)。

あなたの場合、追加するだけです

#define _POSIX_C_SOURCE 199309L

含める前に、含まれていることを確認するtime.h必要があります。

(マンページの「機能テスト マクロ」の部分を参照してください)

于 2015-09-16T12:25:09.990 に答える
1

宣言を含むヘッダーを含めて、ライブラリ関数を宣言する必要があります。time.hこの場合。宣言を自分で書くと、エラーが発生しやすくなります。たとえば、最初の引数を として宣言しましたが、intこれは必ずしも と同じではありませんclockid_t

明らかに、他の誰かが既に time.h を含めています。

「他の誰か」が必要なヘッダーをインクルードしたと思い込まないでください。使用するすべてのヘッダーを必ず自分で含めてください。

編集:

はい。私はすでにtime.hを含めました

その場合、 yourtime.hは を宣言していないように見えますclock_gettime。c ライブラリが POSIX をサポートしていることを再確認する必要があります。

したがって、このエラーは予想されます

ヘッダーを含める場合、宣言されていないことは想定されていません。clock_gettimec ライブラリが POSIX をサポートしていない場合を除きます。

于 2015-09-16T12:20:36.867 に答える