我不得不将一个应用程序从C++重写为C。我在Ubuntu12.04上使用的是gcc和Eclipse。在这样做的过程中,我遇到了这个错误
../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头文件中。我错过了什么?
发布于 2012-06-22 17:16:52
timespec是一个struct,你需要显式地告诉编译器这一点。如果你仔细阅读手册页,你可以看到它是这样陈述的。
这应该是可行的:
#include <time.h>
int main(void) {
struct timespec TS;
TS.tv_nsec = 1;
return 0;
}附加说明:如果将其定义为typedef struct,则不需要手动添加struct部件。但是,您应该假设大多数/所有纯C结构都没有定义为typedef
发布于 2012-06-22 17:16:10
它不应该仅仅是timespec,因为timespec是一个结构。应该是struct timespec。请相应地修改您的代码。
发布于 2015-11-08 18:37:39
当我试图在Visual Studio2015下编译一个正在工作的项目时,我得到了这个错误。
解决方案是将HAVE_STRUCT_TIMESPEC添加到预处理器定义中。
通过图形用户界面执行:项目属性(pan) >属性页(图标)>配置属性> C/C++ >预处理器>预处理器定义>编辑>添加HAVE_STRUCT_TIMESPEC
或手动:编辑每个项目文件,并将每个<PreprocessorDefinitions>实例(每个文件可以有几个)替换为以下内容:
<PreprocessorDefinitions>HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>注:我找到了这个答案,所以我把它贴在这里。
https://stackoverflow.com/questions/11153334
复制相似问题