timepec在time.h中找不到

我不得不将应用程序从C ++重写为C.我在Ubuntu 12.04上使用gcc和Eclipse。 这样做我遇到了这个错误

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

这是我的代码片段,可以重现问题

  #include  int main(void) { timespec TS; TS.tv_nsec = 1; return 0; } 

我在这里很困惑 – 我是一名C ++编码器,从来没有在我的生活中编写过纯C应用程序,但clock_gettime的手册页清楚地表明timespec存在于time.h头文件中,我在这里包含。 我错过了什么?

timespec是一个struct ,你需要明确告诉编译器这个。 如果您仔细阅读手册页,您可以看到它已经说明了。

这应该工作:

 #include  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:项目属性(平移)>属性页(图标)>配置属性> C / C ++>预处理器>预处理器定义>编辑>添加HAVE_STRUCT_TIMESPEC

或者手动:编辑每个项目文件并替换

每个实例(每个文件可以有几个),例如:

 HAVE_STRUCT_TIMESPEC;WIN32;__GNU_LIBRARY__;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 

注意:我在Github问题上找到了这个答案,所以我在这里发布。