找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2101|回复: 20
收起左侧

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

[复制链接]
ID:410689 发表于 2020-3-5 19:33 | 显示全部楼层 |阅读模式
用keil5做一个项目,如果定义了这个变量“unsigned int red;”,程序完全正常,如果不定义,程序会出错
关键的地方是,这个变量在整个程序中都不会用到,而且换个变量名也不行,请高人指点下。谢谢了啊
回复

使用道具 举报

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

使用道具 举报

ID:462827 发表于 2020-3-5 22:53 | 显示全部楼层
出错具体信息贴上来看看
回复

使用道具 举报

ID:699855 发表于 2020-3-5 23:02 来自手机 | 显示全部楼层
有用库吗
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

ID:410689 发表于 2020-3-6 09:20 | 显示全部楼层
hantu 发表于 2020-3-5 22:53
出错具体信息贴上来看看

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

使用道具 举报

ID:410689 发表于 2020-3-6 09:20 | 显示全部楼层

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

使用道具 举报

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

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

使用道具 举报

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

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

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

使用道具 举报

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

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

使用道具 举报

ID:487821 发表于 2020-3-6 21:38 | 显示全部楼层
wuxiaojia 发表于 2020-3-6 09:29
你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输 ...

重载一下工程
回复

使用道具 举报

ID:410689 发表于 2020-3-7 18:13 | 显示全部楼层

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

使用道具 举报

ID:704513 发表于 2020-3-8 13:48 | 显示全部楼层
定义的unsigned int red是局部变量?考虑给unsigned int red赋一些值看看运行结果。
回复

使用道具 举报

ID:700528 发表于 2020-3-8 14:39 | 显示全部楼层
把部分代码贴出来让大家给你把把脉
回复

使用道具 举报

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

使用道具 举报

ID:410689 发表于 2020-3-11 17:30 | 显示全部楼层
awrynos 发表于 2020-3-8 13:48
定义的unsigned int red是局部变量?考虑给unsigned int red赋一些值看看运行结果。

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

使用道具 举报

ID:410689 发表于 2020-3-11 17:31 | 显示全部楼层
依利达 发表于 2020-3-8 14:39
把部分代码贴出来让大家给你把把脉

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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