在的timespec不time.h中找到(timespec not found in time.h)

2019-06-25 16:20发布

我不必重写从C ++来C.我使用GCC和Eclipse在Ubuntu 12.04的应用程序。 在这方面,我所遇到的这个错误

    ../src/TTNoddy.c: In function ‘main’:
    ../src/TTNoddy.c:16:2: error: unknown type name ‘timespec’

下面是重现问题我的代码片段

    #include <time.h>

    int main(void) {

        timespec TS;
        TS.tv_nsec = 1;

        return 0;
    }

我在这里感到困惑-我是一个C ++编码器,在我的生活中从未写过纯C申请,但该名男子页clock_gettime清楚地表明timespec是在我这里包括了time.h中头文件中找到。 有什么我错过了?

Answer 1:

的timespec是一个struct ,你需要明确地告诉编译器这一点。 如果你仔细阅读说明书页,你可以看到它是如此陈述。

这应该工作:

#include <time.h>

int main(void) {
    struct timespec TS;
    TS.tv_nsec = 1;

    return 0;
}

附加说明 :如果它已被定义为一个typedef struct ,你就不会需要添加的struct手动一部分。 但是,你应该假设大多数/所有纯C结构都没有被定义为typedef



Answer 2:

它不应该只是作为的timespec是的timespec一个结构。 它应该是struct timespec 。 请相应地修改代码。



Answer 3:

试图编译的Visual Studio 2015年的一个工作项目时,我得到这个错误。

解决的办法是添加HAVE_STRUCT_TIMESPEC到预处理器定义。

通过GUI:项目属性(PAN)>属性页(图标)>配置属性> C / C ++>预处理>预处理定义>编辑>添加HAVE_STRUCT_TIMESPEC

或手动:编辑每个项目文件和替换的每个实例<PreprocessorDefinitions>可以有每个文件数)的东西,如:

<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

注:我发现这个答案的地方在Github上的问题 ,所以我在这里张贴。



Answer 4:

这个问题给了我一会的问题,我终于实现了我的代码中定义结构的timespec。 (刚才复制过来,直接从人了nanosleep )

#include <time.h>

struct timespec {
    time_t tv_sec;        /* seconds */
    long   tv_nsec;       /* nanoseconds */
};

int main(void) {
    struct timespec TS;
    TS.tv_nsec = 1;

    return 0;
}


文章来源: timespec not found in time.h
标签: c struct