标题: 关于C语言变量的一个非常奇怪的问题 [打印本页]

作者: wuxiaojia    时间: 2020-3-5 19:33
标题: 关于C语言变量的一个非常奇怪的问题
用keil5做一个项目,如果定义了这个变量“unsigned int red;”,程序完全正常,如果不定义,程序会出错
关键的地方是,这个变量在整个程序中都不会用到,而且换个变量名也不行,请高人指点下。谢谢了啊

作者: xianming    时间: 2020-3-5 20:14
在c语言里,每一个用到的变量都需要定义。你说的
这个变量在整个程序中都不会用到
是说变量在代码里从来都没有出现,编译器仍然报错吗?是不是子程序用到了变量?
作者: hantu    时间: 2020-3-5 22:53
出错具体信息贴上来看看
作者: eastjack    时间: 2020-3-5 23:02
有用库吗
作者: lovexulu    时间: 2020-3-5 23:06
不会有这种事的,假如这个变量是在包含头文件后就定义的,则为全局变量,在项目其他C文件中要用到的。通常较为规范的程序写法都会把每个外设写在一个单独的C文件中,然后通过头文件包含进来。所以这个变量一定会被使用,否则不会报错。
作者: csmyldl    时间: 2020-3-5 23:15
如果整个程序都没用到的话,编程时定义这个变量的目的是什么?(难道你预先知道不定义就会有错?)
作者: faguiq    时间: 2020-3-6 00:38
肯定是在哪里用到了red,不然不可能的,你搜一下就出来了,程序里没用到,也有可能你原来定义这个变量时又在哪里声明了,把声明函数搜出来一起删了
作者: wuxiaojia    时间: 2020-3-6 09:18
xianming 发表于 2020-3-5 20:14
在c语言里,每一个用到的变量都需要定义。你说的 是说变量在代码里从来都没有出现,编译器仍然报错吗?是不 ...

你好,感谢你的回复,编译器没有报错,程序也能运行,但结果是错误的。
作者: wuxiaojia    时间: 2020-3-6 09:20
hantu 发表于 2020-3-5 22:53
出错具体信息贴上来看看

你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。
作者: wuxiaojia    时间: 2020-3-6 09:20
eastjack 发表于 2020-3-5 23:02
有用库吗

你好,感谢你的回复。
没有用库呢。。。。。
作者: wuxiaojia    时间: 2020-3-6 09:22
lovexulu 发表于 2020-3-5 23:06
不会有这种事的,假如这个变量是在包含头文件后就定义的,则为全局变量,在项目其他C文件中要用到的 ...

你好,感谢你的回复。
开始我也以为是哪里有用到,但是搜索了整个工程,都没有用到的地方。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。
作者: wuxiaojia    时间: 2020-3-6 09:28
csmyldl 发表于 2020-3-5 23:15
如果整个程序都没用到的话,编程时定义这个变量的目的是什么?(难道你预先知道不定义就会有错?)

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

我在写代码的时候有保留工作进程的习惯,就是写一部分,调试成功后就保留起来,然后再复制一份接着做,这样就能查找是在哪一级出现问题,所以才发现是这个问题,实验了很多次,只要删除这个没有用的变量,输出结果就会出错。。。。。。。
作者: wuxiaojia    时间: 2020-3-6 09:29
faguiq 发表于 2020-3-6 00:38
肯定是在哪里用到了red,不然不可能的,你搜一下就出来了,程序里没用到,也有可能你原来定义这个变量时又 ...

你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输出也是0个错误、0个警告。
搜索了整个工程,都没有用到的地方啊。。。。。。。
作者: faguiq    时间: 2020-3-6 21:38
wuxiaojia 发表于 2020-3-6 09:29
你好,感谢你的回复。
在保留变量的情况下,最终输出是0个错误、0个警告。
在删除变量的情况下,最终输 ...

重载一下工程
作者: wuxiaojia    时间: 2020-3-7 18:13
faguiq 发表于 2020-3-6 21:38
重载一下工程

谢谢你了,我试了你说的方法,还是不行呢。。。。。。
作者: awrynos    时间: 2020-3-8 13:48
定义的unsigned int red是局部变量?考虑给unsigned int red赋一些值看看运行结果。
作者: 依利达    时间: 2020-3-8 14:39
把部分代码贴出来让大家给你把把脉
作者: 杀死比亚    时间: 2020-3-8 17:47
把程序关掉重新打开程序,或者全局查找一下,看有没有被用到的地方
作者: wuxiaojia    时间: 2020-3-11 17:30
awrynos 发表于 2020-3-8 13:48
定义的unsigned int red是局部变量?考虑给unsigned int red赋一些值看看运行结果。

你好,感谢你的回复
是否赋值都没有关系,只要定义了,程序运行就正常,否则就不正常。
作者: wuxiaojia    时间: 2020-3-11 17:31
依利达 发表于 2020-3-8 14:39
把部分代码贴出来让大家给你把把脉

你好,感谢你的回复
就是定义了这个变量就可以,没有定义就不行,但是编译都是零错误零警告。
作者: wuxiaojia    时间: 2020-3-11 17:31
杀死比亚 发表于 2020-3-8 17:47
把程序关掉重新打开程序,或者全局查找一下,看有没有被用到的地方

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





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1