首页 > 解决方案 > 无效使用未定义类型和存储大小未知

问题描述

我正在尝试将一些功能移动到c项目中的单独文件。

util.h

#ifndef _UTIL_H
#define _UTIL_H

#include <signal.h>
#include <termios.h>
#include <time.h>

...

extern struct timeval tv1, tv2, dtv;

void time_start();

long time_stop();

util.c

#include "util.h"

...
struct timeval tv1, tv2, dtv;

void time_start() { gettimeofday(&tv1, &timezone); }

long time_stop()
{
    gettimeofday(&tv2, &timezone);
    dtv.tv_sec = tv2.tv_sec - tv1.tv_sec;
...

在cmake我有

add_executable(mpptd mpptd.c util.c)

我在编译期间收到以下错误

[build] ../settings/daemons/util.c: In function ‘time_stop’:
[build] ../settings/daemons/util.c:14:8: error: invalid use of undefined type ‘struct timeval’
[build]      dtv.tv_sec = tv2.tv_sec - tv1.tv_sec;
[build]         ^

[build] ../settings/daemons/util.c: At top level:
[build] ../settings/daemons/util.c:7:16: error: storage size of ‘tv1’ isn’t known
[build]  struct timeval tv1, tv2, dtv;
[build]                 ^~~

这里有什么问题?为什么“存储大小”错误比“未定义类型”错误晚?谁不早点去?

标签: cstructheader-filesextern

解决方案


struct timeval在 sys/time.h 中定义。你需要包括它。

#ifndef _UTIL_H
#define _UTIL_H

#include <signal.h>
#include <termios.h>
#include <time.h>
#include <sys/time.h>

...

推荐阅读