EclipseのCコードに問題がありました。具体的には、私のsleep-methodは、timespecが記述されている行にエラーを生成します。私が何を間違えたのか教えてもらえますか?コードは次のとおりです。
void sleep(double time) {
nanosleep(
(struct timespec[]) { {time,((time -((time_t)time)) * 1000000000)}},
NULL);
}
EclipseのCコードに問題がありました。具体的には、私のsleep-methodは、timespecが記述されている行にエラーを生成します。私が何を間違えたのか教えてもらえますか?コードは次のとおりです。
void sleep(double time) {
nanosleep(
(struct timespec[]) { {time,((time -((time_t)time)) * 1000000000)}},
NULL);
}
タイプ を定義するヘッダーファイルをインクルードする必要がありますtimespec
。また:
2番目はエラーの最も可能性の高い原因のようです。配列を作成しているので、コンパイラは、配列にtimespec
その量のメモリを割り当てる必要があるため、の定義を知る必要があります。
問題は、C標準で定義されていないstruct timespec
ことです。nanosleep()
それらはPOSIX標準によって提供されます。コンパイルしているようです。-std=c99
これにより、コンパイラはC99標準に厳密に準拠し、エラーが報告されます。これらのPOSIX構造をコンパイルできるようにするには、それらを明示的に有効にする必要があります。
#if __STDC_VERSION__ >= 199901L
# define _XOPEN_SOURCE 600
#else
# define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
#include <time.h>
int main()
{
double time = 0.1;
nanosleep((struct timespec[]) { {time, ((time - ((time_t)time)) *
1000000000)}}, NULL);
return 0;
}
__STDC_VERSION__
使用しているコンパイラがc99であるかどうかをチェックし、コンパイラによってはPOSIX定義を有効にします。
_XOPEN_SOURCE
参照するPOSIXのバージョンを定義します。使用するPOSIXバージョンに従って定義を選択します。600
を参照しますがPOSIX 2004
を500
参照しPOSIX 1995
ます。