c - 无效使用未定义类型和存储大小未知
问题描述
我正在尝试将一些功能移动到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] ^~~
这里有什么问题?为什么“存储大小”错误比“未定义类型”错误晚?谁不早点去?
解决方案
struct timeval
在 sys/time.h 中定义。你需要包括它。
#ifndef _UTIL_H
#define _UTIL_H
#include <signal.h>
#include <termios.h>
#include <time.h>
#include <sys/time.h>
...
推荐阅读
- javascript - 如果我在一个 DOM 对象上添加了多个“点击”事件,它们是否总是会根据添加的方式触发?
- javascript - 无法在工作表范围内插入具有值的行
- neo4j - GraphQL 与 Bolt - Neo4j
- excel - 有条件地将记录移动到新 wksheets 的问题
- android - 通过`Dispatchers.IO`启动协程时出现NetworkOnMainThreadException
- sql - 如何使用递归 CTE 查询避免急切的假脱机?
- elisp - 定义 elisp 函数,获取 2 个列表并返回列表 1 中的原子在列表 2 中出现的次数
- php - 在 WooCommerce 中向非会员显示会员折扣价
- java - 如何修复 Java AVL 树插入/平衡不正确
- css - 如何使用未包含在反应代码中的悬停?