事例:
函数写法1:
u8is_timeout(tickstart_time,tickinterval)
{
return(get_diff_tick(get_tick(),start_time)>interval);
}
函数写法2:
u8is_timeout(tickstart_time,tickinterval)
{
u8status;
status=get_diff_tick(get_tick(),start_time)>interval);
returnstatus;
}
函数调用方法:
if(is_timeout(start_time,1000))
{
do_something();
}
问题:在有中止运用的渠道上,运用函数写法1可能会形成if句子判别不正确。分明不到1000ms时刻,却进入了do_something()。
剖析:在51渠道,默许情况下函数的调用、中止的切换,并不会将被打断函数的参数、局部变量压入栈,而是存储在固定存储区中。如果在履行return之前刚好需求去履行中止,则51的参数和局部变量值是能够被保存在固定存储区的,而中心数据(如return方法1中,需求回来的值)是不能被保存的,当中止回来后,无法正确取得从前的中心数据,而直接将不定数据回来,形成程序逻辑犯错。而咱们将return方法改为方法二,则能够保存参数、局部变量,回来正确的值,确保程序逻辑正确。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/256882.html