你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何跳出双层循环,加密程序等问题

[复制链接]
wrdt24435 提问时间:2018-9-6 16:56 /
问题1:有什么更好的方案跳出双重循环,例如在for循环里面有个while循环等待某个位变化,但是怕被干扰了死在while循环里于是在while循环里计数:
方案1: 用goto:  while(判断){  if(i++>30000)   goto xxx}   感觉非常方便,但老师和一些书籍都说的最好不要用goto
方案2: while(判断){  if(i++>30000)   {i1=1; break;}  }  
            if(i1==1)    break;   //(在这跳出for循环)
请教各位还有什么方法跳出双层循环。

问题2:直接跳入函数好还是,打开函数入口好?
例如按键扫描程序,在获取键值后是直接进入 KEY_Deal()  //假设这个是按键处理程序
方案2:  if(SWITCH==0;)   return;               //这是主程序扫描程序之一,获取键值后赋值SWITCH,相当于打开按键处理入口,让单片机扫过去处理键值
              KEY_Deal();            //接下来的按键程序
我的理解是方案2能减少堆栈,并且在较为简单的主程序里不会影响处理按键速度。

问题3: 包含过多.h文件会增加代码长度吗?
我现在是用教程的方法,包含一个例如叫global.h文件,在这个文件里包含工程用到的所有的.h文件,然后所有的.c文件只需包含这个global.h就够了,我看了别人的程序是每个.c文件里包含用到的.h文件,用global.h方案会增加代码长度吗,还是会出现其他问题?感觉十分方便。

问题4: 我想先在第一次上电时检查FLASH的某些位置(如0x8555之类任意的)数据是否是自己赋值,然后在程序在第一次上电时往这些flash位置写入多个数据,这么做是想防止复制烧录文件,这种方法可行吗?对程序加密不是很懂,望指教。

目前在学习方向是精通C和了解各种电子元器件和电路,下一步方向跑嵌入式系统,学习ARM机和Linux系统。想法有什么不对请前辈指教下

收藏 评论5 发布时间:2018-9-6 16:56

举报

5个回答
stm1024 回答时间:2018-9-6 17:35:51
本帖最后由 stm1024 于 2018-9-7 08:30 编辑

外层循环中加入一个flag,这个flag被内层循环修改,然后在外层判断flag状态,可以决定是否跳出外层循环。
类似这样:
  1. while(condition1)
  2. {
  3.     flag=false;
  4.     ....//其他语句
  5.     while(contiditon2)
  6.     {
  7.         ...//其他语句
  8.         if(condition3)
  9.         {
  10.              flag=true;
  11.              brake;
  12.         }
  13.         if(flag)break;
  14.     }
  15. }
复制代码
此外,偶尔用一下goto,也不是什么十恶不赦的坏事。皮一下很开心,皮几万就死翘翘了。
包含过多的头文件,会影响编译的时间,只要你包含了,编译器就要编译。
但是对最终可执行文件的大小没有影响。因为在链接的时候,链接器只会把需要的函数等链接进去


评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

QianFan 回答时间:2018-9-6 18:01:53
规矩是死的,人是活的。goto并不是十恶不赦,有的地方用goto反而让程序更好理解。

至少比判断一堆条件要好得多。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

andeyqi 回答时间:2018-9-6 18:02:29
上学时老师也说不要使用goto,工作后发现使用goto跳转会让代码分支条理更清晰,linux源码中使用goto的太多了,现在编码也会经常使用goto.

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

csg123 回答时间:2018-9-6 22:35:02
用goto好。清晰

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

feixiang20 回答时间:2018-9-6 23:16:34
如果实在对代码不熟悉,用GOTO可以啊。从代码准确运用里,循环是可以自己跳出去的,除非遇到需要跳转的地方。尤其是FOR,WHILE之类。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版