3

我在 Eclipse 中的 C 代码有问题。具体来说,我的睡眠方法确实会在说明 timespec 的行中产生错误。你们能告诉我我做错了什么吗?这是代码:

void sleep(double time) {
    nanosleep(
        (struct timespec[]) { {time,((time -((time_t)time)) * 1000000000)}},
        NULL);
}
4

1 回答 1

5

您需要包含定义类型 timespec的头文件。任何一个:

  • 您忘记包含头文件或
  • 您只需转发声明的类型。

第二个似乎是最可能导致错误的原因。由于您正在创建一个数组,因此编译器需要知道 的定义,timespec因为它需要为数组分配那么多内存。


问题是C 标准struct timespecnanosleep()没有定义。它们由 POSIX 标准提供。似乎您正在编译,-std=c99这使您的编译器严格遵守 C99 标准并因此报告错误。为了能够编译这些 POSIX 结构,您必须显式启用它们。

编译std=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 版本选择定义。600POSIX 2004while500POSIX 1995.

于 2013-01-19T14:44:52.587 回答