[讨论] 关于有返回函数在C51程序设计中的问题??

徐建庆   2017-3-22 20:30 楼主
最近的程序开发当中,遇到了一个蛮有意思的问题。我现在有一个外设,我写了个初始化函数,bit periphal_ini(),如果初始化成功就返回1,初始化失败就返回0.以前我都是这样写,periphal_ini();

if( periphal_ini() )
{

}
那么请看我的图片,如果我图片上结论正确的话。
那我只要写
if( periphal_ini() )
{
}
就是我认为,在判断peiphal_ini()的时候,这个函数体被完整的执行了。
假设我的结论正确的话,按照我以前那样写,peiphal_ini()这个函数体就被执行了两次,如果里面有全局变量,那程序不就有BUG了吗??
望各位不吝赐教。

  • 有返函数的问题.jpg

回复评论 (5)

if( periphal_ini() ) 当然会完整的执行periphal_ini()  这是没有疑问的。
点赞  2017-3-22 22:32
如果你不希望periphal_ini()执行两次,你可以这样写: int f = periphal_ini(); if (f) { …… }这样你可以反复使用periphal_ini()的返回值。 如果你只需要使用一次periphal_ini()的返回值,那么你后面一种写法是合适的。 本帖最后由 cdzx@163.com 于 2017-3-23 00:05 编辑
点赞  2017-3-23 00:04
图片中的程序 没看出毛病
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2017-3-23 08:42
引用: cdzx@163.com 发表于 2017-3-23 00:04
如果你不希望periphal_ini()执行两次,你可以这样写:

int f = periphal_ini();
if (f)
{
    ……
...

是的,你这种使用位变量的做法很不错,学到了。我那个程序的一个bug就是periphal_ini()里面就是我放了个全部变量,导致被窝两次使用了。多谢赐教。
点赞  2017-3-23 15:08
引用: strong161 发表于 2017-3-22 22:32
if( periphal_ini() ) 当然会完整的执行periphal_ini()  这是没有疑问的。

确实是这样的。那么我以后就不会写出periphal_ini();if( periphal_ini() )  {.....}
点赞  2017-3-23 15:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复