首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未在time.h中找到timespec

未在time.h中找到timespec
EN

Stack Overflow用户
提问于 2012-06-22 17:13:43
回答 5查看 28.5K关注 0票数 18

我不得不将一个应用程序从C++重写为C。我在Ubuntu12.04上使用的是gcc和Eclipse。在这样做的过程中,我遇到了这个错误

代码语言:javascript
复制
../src/TTNoddy.c: In function ‘main’:
../src/TTNoddy.c:16:2: error: unknown type name ‘timespec’

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

代码语言:javascript
复制
#include <time.h>

int main(void) {

    timespec TS;
    TS.tv_nsec = 1;

    return 0;
}

我对此感到困惑--我是一名C++程序员,一生中从未编写过纯C语言的应用程序,但clock_gettime的手册页清楚地表明,timespec位于我在这里包含的time.h头文件中。我错过了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-22 17:16:52

timespec是一个struct,你需要显式地告诉编译器这一点。如果你仔细阅读手册页,你可以看到它是这样陈述的。

这应该是可行的:

代码语言:javascript
复制
#include <time.h>

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

    return 0;
}

附加说明:如果将其定义为typedef struct,则不需要手动添加struct部件。但是,您应该假设大多数/所有纯C结构都没有定义为typedef

票数 23
EN

Stack Overflow用户

发布于 2012-06-22 17:16:10

它不应该仅仅是timespec,因为timespec是一个结构。应该是struct timespec。请相应地修改您的代码。

票数 3
EN

Stack Overflow用户

发布于 2015-11-08 18:37:39

当我试图在Visual Studio2015下编译一个正在工作的项目时,我得到了这个错误。

解决方案是将HAVE_STRUCT_TIMESPEC添加到预处理器定义中。

通过图形用户界面执行项目属性(pan) >属性页(图标)>配置属性> C/C++ >预处理器>预处理器定义>编辑>添加HAVE_STRUCT_TIMESPEC

或手动:编辑每个项目文件,并将每个<PreprocessorDefinitions>实例(每个文件可以有几个)替换为以下内容:

代码语言:javascript
复制
<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

注:我找到了这个答案,所以我把它贴在这里。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11153334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档