找回密码
 立即注册
查看: 1210|回复: 16

编译器提示错误

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-22 09:15:02 | 显示全部楼层 |阅读模式
在power_off.c文件里面已经定义count_5ms_off为无符号整型变量,在main.c文件里面也包括power_off.h文件进来了,power_off.h和power_off.c文件均添加到工程,但是在main.c文件里面使用count_5ms_off为何提示未定义?

编译器提示错误-1.png
编译器提示错误-2.png
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2025-04-30 10:59:33

25

主题

1154

回帖

2391

积分

超级版主

积分
2391
发表于 2023-3-22 09:32:46 | 显示全部楼层
main.c文件开始的地方加一行 extern uint count_5ms_off ;
点c只能调用点h里的变量,您现在在调用别的点c里的变量,要加extern做处理
STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-3-22 09:35:45 | 显示全部楼层
在power_off.h文件中添加变量声明
extern unsigned int count_5ms_off;

然后在main.c文件中添加如下头文件包含
#include "power_off.h"
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-22 09:53:10 | 显示全部楼层
STCAI-32*** 发表于 2023-3-22 09:32
main.c文件开始的地方加一行 extern uint count_5ms_off ;
点c只能调用点h里的变量,您现在在调用别的点c ...

您说“点c只能调用点h里的变量”,可是main.c文件已经包括.h文件进来了,那其他.c文件里面的函数如果要在main.c文件里面使用,是不是也要在main.c文件开始的地方加函数的声明?

点评

你贴出.h的内容看看  详情 回复 发表于 2023-3-22 09:59
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-3-22 09:59:41 | 显示全部楼层
98057*** 发表于 2023-3-22 09:53
您说“点c只能调用点h里的变量”,可是main.c文件已经包括.h文件进来了,那其他.c文件里面的函数如果要在 ...

你贴出.h的内容看看
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-22 10:20:10 | 显示全部楼层
梁*** 发表于 2023-3-22 09:59
你贴出.h的内容看看

梁工,如下是.h和.c的代码,帮忙看看是什么问题,谢谢,附件是全部的代码,谢谢。

1.png
2.png
3.png
4.png

code.zip

51.59 KB, 下载次数: 125

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-22 10:29:25 | 显示全部楼层
zh*** 发表于 2023-3-22 09:35
在power_off.h文件中添加变量声明
extern unsigned int count_5ms_off;

不应该是在main.c文件里面加extern unsigned int count_5ms_off;吗?谢谢。
1.png
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-3-22 10:59:35 | 显示全部楼层
你的“power_off.h”没有下面这一句,调用的C文件开头也没有这一句:
extern unsigned int count_5ms_off;

那么,调用的C文件就看不到这个变量已经定义。
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-22 11:42:50 | 显示全部楼层
zh*** 发表于 2023-3-22 09:35
在power_off.h文件中添加变量声明
extern unsigned int count_5ms_off;

在power_off.h文件中添加如下变量声明不就可以了吗?
unsigned int count_5ms_off;   为什么要前面加extern呢?

然后在main.c文件中添加如下头文件包含
#include "power_off.h"

点评

没有外部声明,要么提示你重复定义,要么提示你未定义。 还是建议你仔细看一下C语言,这是基础中的基础哦。  详情 回复 发表于 2023-3-22 14:33
如果不加extern 只要.c文件include这个.h,变量都会被定义一次, 会出现重复定义的错误 除非.h文件只被一个.c文件包含  详情 回复 发表于 2023-3-22 12:41
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-3-22 12:41:53 | 显示全部楼层
本帖最后由 zhp 于 2023-3-22 12:49 编辑
98057*** 发表于 2023-3-22 11:42
在power_off.h文件中添加如下变量声明不就可以了吗?
unsigned int count_5ms_off;   为什么要前面加exte ...

如果不加extern
只要.c文件include这个.h,变量都会被定义一次,
会出现重复定义的错误
除非.h文件只被一个.c文件包含


在.h文件中声明" extern unsigned int count_5ms_off"的好处是
只要.c文件中需要使用这个变量,只需要include这个.h文件就可以了
而不需要每个.c文件中都用extern声明一次
当然,如果你喜欢在.c文件中都用extern声明也没问题,这是个人喜好问题


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 22:15 , Processed in 0.159899 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表