提高飞思小车程序之一(跳转的艺术)

发布时间:2011-9-16 15:07    发布者:1640190015
关键词: 飞思小车程序 , 跳转
摘自wanjian的日志

为了提高图像处理(特别是边缘检测)算法的效率,在循环处理中一旦找到灰度跳变就设定好标志位,然后返回,而不会继续在循环中苦苦搜索。因为目的已经达到了,已经找到该找的东西,不必把CPU浪费在循环中。下面WJ介绍几种实现的方法,供同学们参考。
1 用得最多的break和continue.
  大家都知道break是跳出总循环,不再进行循环;continue是跳出本次循环,执行下一次循环.
  如for (int i=0;i<10;i++)
    {
       if (i==5)
          break;
       printf(i);
    }
   这样只能执行到i=5,打印输出0 1 2 3 4
  如for (int i=0;i<10;i++)
    {
       if (i==5)
          continue;
       printf(i);
    }
  这样只能执行到i=9,打印输出0 1 2 3 4 6 7 8 9,没有5

但是,有一个问题:break和continue只限于退出一层循环。如果是双重循环,那么只能退出内层循环。
for (int i=0;i<10;i++)
{
  for (int j=0;j<10;j++)
   {
       if (i==5 && j==5)
          break;
       printf(i);
       printf(j);
   }
}
这个结果大家可以自己试一下。
那怎么办呢,把上面的稍加改进即可。我们设置一个标志变量,如果内嵌循环退出,那么就把这个标志变量置位。然后在外层循环检测标志变量是否置位,为真的话跳出外层循环。
BOOL bset=FALSE;
for (int i=0;i<10;i++)
{
   for (int j=0;j<10;j++)
   {
       if (i==5 && j==5)
       {
         bset=TRUE;
         break;
       }
        printf(i);
        printf(j);
   }
     if (bset) break;
}
2 在for循环里加限制条件.  
  BOOL bset=FALSE;
  for(;!bset;)   
  {   
  for(;!bset;)   
    {   
      if (i==5 && j==5)
       bset=TRUE;
      else
        {
          printf(i);
          printf(j);
        }
    }   
}
这种方法适用条件不多的情况,否则程序可读性很差。
3 直接用goto
  goto这个语句一直让不少人不齿,但是存在即合理。个人觉得它用在这种情况是最合适的了。
  for (int i=0;i<10;i++)
{
   for (int j=0;j<10;j++)
   {
       if (i==5 && j==5)
       {
         goto out;
       }
        printf(i);
        printf(j);
   }
}
out:
   your next code.....
为什么有人一直抨击它呢?是因为用上它就会喜欢上它,无法自拨以至于见到程序跳转就想到goto,结果当然就挠乱整个程序的秩序。
4 补充一条。单独写个void calculate (XXXXX)
       void calculate (XXXXX)
     {
          for (int i=0;i<10;i++)
         {
             for (int j=0;j<10;j++)
                {
               if (i==5 && j==5)
                       return;                  
                       printf(i);
                      printf(j);
               }
           }
      }
这个方法相对来说比较高级,主要是形参的传递比较高级,可以是数值,地址,引用,等等,非常灵活。
但也容易出错。建议用结构体指针。
本文地址:https://www.eechina.com/thread-76619-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表