我在 Eclipse 中的 C 代码有问题。具体来说,我的睡眠方法确实会在说明 timespec 的行中产生错误。你们能告诉我我做错了什么吗?这是代码:
void sleep(double time) {
nanosleep(
(struct timespec[]) { {time,((time -((time_t)time)) * 1000000000)}},
NULL);
}
我在 Eclipse 中的 C 代码有问题。具体来说,我的睡眠方法确实会在说明 timespec 的行中产生错误。你们能告诉我我做错了什么吗?这是代码:
void sleep(double time) {
nanosleep(
(struct timespec[]) { {time,((time -((time_t)time)) * 1000000000)}},
NULL);
}
您需要包含定义类型 timespec
的头文件。任何一个:
第二个似乎是最可能导致错误的原因。由于您正在创建一个数组,因此编译器需要知道 的定义,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
while500
指POSIX 1995
.