找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2090|回复: 20
打印 上一主题 下一主题
收起左侧

关于C语言变量的一个非常奇怪的问题

[复制链接]
跳转到指定楼层
楼主
ID:410689 发表于 2020-3-5 19:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用keil5做一个项目,如果定义了这个变量“unsigned int red;”,程序完全正常,如果不定义,程序会出错
关键的地方是,这个变量在整个程序中都不会用到,而且换个变量名也不行,请高人指点下。谢谢了啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:691449 发表于 2020-3-5 20:14 | 只看该作者
在c语言里,每一个用到的变量都需要定义。你说的
这个变量在整个程序中都不会用到
是说变量在代码里从来都没有出现,编译器仍然报错吗?是不是子程序用到了变量?
回复

使用道具 举报

板凳
ID:462827 发表于 2020-3-5 22:53 | 只看该作者
出错具体信息贴上来看看
回复

使用道具 举报

地板
ID:699855 发表于 2020-3-5 23:02 来自手机 | 只看该作者
有用库吗
回复

使用道具 举报

5#
ID:687694 发表于 2020-3-5 23:06 | 只看该作者
不会有这种事的,假如这个变量是在包含头文件后就定义的,则为全局变量,在项目其他C文件中要用到的。通常较为规范的程序写法都会把每个外设写在一个单独的C文件中,然后通过头文件包含进来。所以这个变量一定会被使用,否则不会报错。
回复

使用道具 举报

6#
ID:235200 发表于 2020-3-5 23:15 | 只看该作者
如果整个程序都没用到的话,编程时定义这个变量的目的是什么?(难道你预先知道不定义就会有错?)
回复

使用道具 举报

7#
ID:487821 发表于 2020-3-6 00:38 | 只看该作者
肯定是在哪里用到了red,不然不可能的,你搜一下就出来了,程序里没用到,也有可能你原来定义这个变量时又在哪里声明了,把声明函数搜出来一起删了
回复

使用道具 举报

8#
ID:410689 发表于 2020-3-6 09:18 | 只看该作者
xianming 发表于 2020-3-5 20:14
在c语言里,每一个用到的变量都需要定义。你说的 是说变量在代码里从来都没有出现,编译器仍然报错吗?是不 ...

你好,感谢你的回复,编译器没有报错,程序也能运行,但结果是错误的。
回复

使用道具 举报

9#
ID:410689 发表于 2020-3-6 09:20 | 只看该作者
hantu 发表于 2020-3-5 22:53
出错具体信息贴上来看看

你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。
回复

使用道具 举报

10#
ID:410689 发表于 2020-3-6 09:20 | 只看该作者

你好,感谢你的回复。
没有用库呢。。。。。
回复

使用道具 举报

11#
ID:410689 发表于 2020-3-6 09:22 | 只看该作者
lovexulu 发表于 2020-3-5 23:06
不会有这种事的,假如这个变量是在包含头文件后就定义的,则为全局变量,在项目其他C文件中要用到的 ...

你好,感谢你的回复。
开始我也以为是哪里有用到,但是搜索了整个工程,都没有用到的地方。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。
回复

使用道具 举报

12#
ID:410689 发表于 2020-3-6 09:28 | 只看该作者
csmyldl 发表于 2020-3-5 23:15
如果整个程序都没用到的话,编程时定义这个变量的目的是什么?(难道你预先知道不定义就会有错?)

你好,感谢你的回复。
代码开始写的时候有用到这个变量,后来在完善的时候就不再需要这个变量了。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。

我在写代码的时候有保留工作进程的习惯,就是写一部分,调试成功后就保留起来,然后再复制一份接着做,这样就能查找是在哪一级出现问题,所以才发现是这个问题,实验了很多次,只要删除这个没有用的变量,输出结果就会出错。。。。。。。
回复

使用道具 举报

13#
ID:410689 发表于 2020-3-6 09:29 | 只看该作者
faguiq 发表于 2020-3-6 00:38
肯定是在哪里用到了red,不然不可能的,你搜一下就出来了,程序里没用到,也有可能你原来定义这个变量时又 ...

你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。
搜索了整个工程,都没有用到的地方啊。。。。。。。
回复

使用道具 举报

14#
ID:487821 发表于 2020-3-6 21:38 | 只看该作者
wuxiaojia 发表于 2020-3-6 09:29
你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输 ...

重载一下工程
回复

使用道具 举报

15#
ID:410689 发表于 2020-3-7 18:13 | 只看该作者

谢谢你了,我试了你说的方法,还是不行呢。。。。。。
回复

使用道具 举报

16#
ID:704513 发表于 2020-3-8 13:48 | 只看该作者
定义的unsigned int red是局部变量?考虑给unsigned int red赋一些值看看运行结果。
回复

使用道具 举报

17#
ID:700528 发表于 2020-3-8 14:39 | 只看该作者
把部分代码贴出来让大家给你把把脉
回复

使用道具 举报

18#
ID:210139 发表于 2020-3-8 17:47 | 只看该作者
把程序关掉重新打开程序,或者全局查找一下,看有没有被用到的地方
回复

使用道具 举报

19#
ID:410689 发表于 2020-3-11 17:30 | 只看该作者
awrynos 发表于 2020-3-8 13:48
定义的unsigned int red是局部变量?考虑给unsigned int red赋一些值看看运行结果。

你好,感谢你的回复
是否赋值都没有关系,只要定义了,程序运行就正常,否则就不正常。
回复

使用道具 举报

20#
ID:410689 发表于 2020-3-11 17:31 | 只看该作者
依利达 发表于 2020-3-8 14:39
把部分代码贴出来让大家给你把把脉

你好,感谢你的回复
就是定义了这个变量就可以,没有定义就不行,但是编译都是零错误零警告。
回复

使用道具 举报

21#
ID:410689 发表于 2020-3-11 17:31 | 只看该作者
杀死比亚 发表于 2020-3-8 17:47
把程序关掉重新打开程序,或者全局查找一下,看有没有被用到的地方

你好,感谢你的回复
我试过了,还是不行,不知道是不是我的keil5不稳定
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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