我必须写一个在无限循环中调用sleep(60)
的程序。每循环五次,我必须获取当前时间并打印tm_sec字段。
这是我写的:
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
int main()
{
struct tm t1;
int i=0;
for(;;)
{
sleep(60);
if(i%5==0)
{
gettimeofday(&t1,NULL);
printf("%d\n",t1.tm_sec);
}
i++;
}
}
我得到一个错误,说aggregate tm t1 has incomplete type and cannot be defined.
我不知道我做错了什么。
4条答案
按热度按时间ckocjqey1#
你需要struct timeval,而不是struct tm。试试这个:
另外,您需要
t1.tv_sec
,而不是t1.tm_sec
。cs7cruho2#
你用错了。选择以下两个选项之一:
或者:
chy5wohz3#
gettimeofday
接受指向timeval
的指针,而不是tm
,给出自1970年以来的秒(和微秒)时间。如果你想要一个
tm
,那么你将需要来自<ctime>
的函数,比如localtime()
,来转换timeval
的秒字段。t2a7ltrp4#
我在尝试在ESP32库上编译
m_wifi.h
时遇到了同样的问题。这是C++编译器的问题,可能配置不正确。如果
time.h
包含在你的代码或库中,你会得到这个编译错误。在我的例子中,
tm
结构已经在time.h
中声明了。总之,我所要做的就是删除我包含的库time.h
,并保留ESP32版本ESP32Time.h
我还必须在变量声明部分将代码从
struct tm timeinfo
更正为tm timeinfo
。