标题: 想请问一下C语言循环累加超过变量限制后,系统会出错吗? [打印本页]

作者: seforce    时间: 2020-9-2 17:48
标题: 想请问一下C语言循环累加超过变量限制后,系统会出错吗?
我在一个STC15W系列的单片机程序开发里面,不小心出了个错误。
unsigned int n;
while(1) { n++;…… }
大概就是以上逻辑。
n在实际运行中,很快就超过了65535的限制。我想问这个情况下,继续累加下去,n的值是一直保持65535呢?还是从0开始自动循环呢?系统会不会崩溃?
根据实际情况,系统确实没有崩溃,我也是在后期检查时候才发现这个问题的,因为是分支程序,而且有中断跳出,目前各种测试这个bug并没有出现致命问题。但是可怕的是,1K的固件已经烧进去了,心中忐忑。所以想问问大师们,这样的超限错误,芯片内变量的实际情况是怎样的呢?我需不需要解决bug重新烧录,还是这批就这样放过呢?
先谢谢各位啦

作者: #include51.h    时间: 2020-9-2 18:52
为什么是65535,而不是65536,你也知道到655336就表示为0了,很简单的例子是钟表,到23点59分再走1分钟就是24(0)点,这就叫溢出,他不会理会你到8点要上班,到12点要下班!
作者: znz43a    时间: 2020-9-2 20:00
这个变量 n 在程序其他语句中是否有引用?如果有引用并参与运算,则会引起不可预见的错误。
如无引用,由其在0-65535间循环,不必理会。
作者: 523551742    时间: 2020-9-2 23:04
会从0开始继续循环,具体会不会崩溃要看你是用来干什么的
作者: jizhongbiao    时间: 2020-9-2 23:46
不会出错,加到65535后再加1就从0开始重新加。如果你懂一点汇编就明白了。这是是汇编里面常用的小技巧。
作者: wulin    时间: 2020-9-3 07:22
变量不受约束和溢出肯定会出错,会不会导致灾难性后果就要看这个变量在系统中的具体作用。




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