为什么我的 timespec 数组中出现错误“数组类型具有不完整的元素类型”?

Wol*_*ein 3 c

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

void sleep(double time) {
    nanosleep(
        (struct timespec[]) { {time,((time -((time_t)time)) * 1000000000)}},
        NULL);
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 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;
}  
Run Code Online (Sandbox Code Playgroud)

__STDC_VERSION__检查您使用的编译器是否为 c99 & 取决于它启用 POSIX 定义的编译器。
_XOPEN_SOURCE定义要引用的 POSIX 版本。根据您使用的 POSIX 版本选择定义。600指的是,POSIX 2004500指的是POSIX 1995