我不必重写从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中头文件中找到。 有什么我错过了?
的timespec是一个struct
,你需要明确地告诉编译器这一点。 如果你仔细阅读说明书页,你可以看到它是如此陈述。
这应该工作:
#include <time.h>
int main(void) {
struct timespec TS;
TS.tv_nsec = 1;
return 0;
}
附加说明 :如果它已被定义为一个typedef struct
,你就不会需要添加的struct
手动一部分。 但是,你应该假设大多数/所有纯C结构都没有被定义为typedef
它不应该只是作为的timespec是的timespec一个结构。 它应该是struct timespec
。 请相应地修改代码。
试图编译的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上的问题 ,所以我在这里张贴。
这个问题给了我一会的问题,我终于实现了我的代码中定义结构的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;
}