正文


大家2022年好,我是bug菌~

上一次跟大家更新一篇文章:

<C语言switch中case仅仅只是一个标签>

然后就有粉丝来问了文章里面的达夫设备代码不是很好理解,感觉很怪异:

这让就让我很头疼,文章中应该已经讲得非常详细了,相信大部分都理解了。当然这个朋友可能对C语言不是很熟悉,也可以理解,都是一个熟练过程。

通常善于编程的人逻辑思维是非常敏捷的,因为常常需要把控非常大的逻辑代码,那么"运筹帷幄之中,决胜千里之外"的能力肯定不能太弱,当你看到当前代码就能够知晓后续的程序运行过程和走向,从而理顺其对系统的影响,这才是一个程序员真正对程序的把控力。

后来想想既然是switch中的case是一个标签,那么是不是可以直接用goto来进行模拟呢?于是就有了如下的代码:

1#include <stdio.h>2#include <stdlib.h>34//用goto模拟switch5void duff_Simulate_Copy( int * to, int* from, int count)6{7    int n = (count + 7)/8;89    if(count%8 == 0) goto case_label0;
10    if(count%8 == 1) goto case_label1;
11    if(count%8 == 2) goto case_label2;
12    if(count%8 == 3) goto case_label3;
13    if(count%8 == 4) goto case_label4;
14    if(count%8 == 5) goto case_label5;
15    if(count%8 == 6) goto case_label6;
16    if(count%8 == 7) goto case_label7;
17
18    case_label0:    do{ *to++ = *from++;
19    case_label1:        *to++ = *from++;
20    case_label2:        *to++ = *from++;
21    case_label3:        *to++ = *from++;
22    case_label4:        *to++ = *from++;
23    case_label5:        *to++ = *from++;
24    case_label6:        *to++ = *from++;
25    case_label7:        *to++ = *from++;
26                    }while( --n>0);
27}
28
29//用达夫设备
30void duff_Copy( int * to, int* from, int count)
31 {
32    int n = (count + 7)/8;
33
34    switch( count%8 )
35   {
36     case 0: do{ *to++ = *from++;
37     case 7:     *to++ = *from++;
38     case 6:     *to++ = *from++;
39     case 5:     *to++ = *from++;
40     case 4:     *to++ = *from++;
41     case 3:     *to++ = *from++;
42     case 2:     *to++ = *from++;
43     case 1:     *to++ = *from++;
44                }while(--n > 0);
45    }
46}
47
48//常规数据拷贝
49void  MyCopy( int * Dst, int * Src, int count)
50{
51    int i = 0;
52
53    for(i = 0;i != count; ++i)
54    {
55      *Dst ++  = *Src ++ ;
56    }
57}
58
59//测试应用程序
60int main(int argc, char *argv[]) {
61
62    int Array1[100] = {0};
63    int Array2[100] = {0};
64    long i = 0;
65
66    for(i = 0 ;i < 100;i++)
67    {
68        Array1[i] = i;
69    }
70
71    duff_Simulate_Copy(Array2,Array1,100);
72
73    for(i = 0 ;i < 100;i++)
74    {
75        printf("%d ",Array2[i]);
76        if((i + 1)%10 == 0)
77        printf("\n");
78    }
79
80    return 0;
81}

相信goto语句改写的达夫设备应该可以理解了吧。

同时也从另一方面展示了goto也是大有用处的。

大家也可以关注一下我的视频号:"嵌入式工程师",捕获更多炫酷的嵌入式技术精彩~

最后

好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~,

最后一个bug,bug菌唯一创作平台~

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 

☞  嵌入式C语言进阶专辑 

☞  “bug说”专辑 

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

编码应该运筹帷幄之中,决胜千里之外相关推荐

  1. 运筹学试题-运筹帷幄,决胜千里之外!

  2. 面试官:了解雪崩效应吗?了解Hystrix吗?怎么解决雪崩效应吗?(大型社死现场,教你运筹帷幄之中)

    上篇我们模拟了高并发场景下,系统资源被耗尽导致其他接口访问非常之慢.至此,这篇给出了五种解决方案(当然这个是次要的,主要还是理解原理) 上篇地址:https://blog.csdn.net/Kevin ...

  3. 决胜千里之外:选购优秀邮件服务器 让企业站得更高

    纵观IT技术的快速发展.电子商务国际化愈演愈烈.近几年来,企业邮箱在信息化管理的重要应用及发展潜质,让互联网巨头也纷至沓来,各大邮件服务器软件供应商都已门庭若市.然而,邮件系统种类繁多,各自优劣不同, ...

  4. 想把静态网页放到服务器上,怎么样让所有人都去访问到

    前两天自己买了百度云服务器和域名,然后写了一个静态的网页,准备把这个静态的网页放到服务器上去,这样的话,任何人输入网址,都可以看到我写的这个静态网页:于是这两天一直在研究这东西要怎么做才能实现,零零散 ...

  5. 运筹说 第5期 | 运筹学江湖的形成

    运筹说 第5期 | 运筹学江湖的形成 01 运筹学江湖起源--有人存在的地方就是江湖. 运筹学作为一门现代科学,是在第二次世界大战期间首先在英美两国发展起来的,江湖上大多学者把运筹学描述为就组织系统的 ...

  6. 如何在服务器上部署静态网页,让所有人都能访看到?

    前两天自己买了百度云服务器和域名,然后写了一个静态的网页,准备把这个静态的网页放到服务器上去,这样的话,任何人输入网址,都可以看到我写的这个静态网页:于是这两天一直在研究这东西要怎么做才能实现,零零散 ...

  7. B4:Unity制作Moba类游戏——小兵AI系统

    若想取得战争的胜利,必先控好兵线. ---- 麦克阿瑟 是时候让敌人经历一下我们兵线的洗礼. ---- 拿破仑 在LOL对局中,职业选手对兵线的控制可以说是达到了"运筹帷幄之中,决胜千里之外 ...

  8. 马云如刘邦一样运用人才

    我智商不高,我把这世界上智商非常高的人都请到了阿里巴巴:我不懂财务,我把财务最好的人请来:我不懂技术,把技术最好的人请来.把他们请来,用我们的情商把大家团结在一起,形成一个团队,让大家开心快乐,建立一 ...

  9. 有了服务器,域名,如何将静态网页放到服务器上,让所有人都能访看到?

    前两天自己买了百度云服务器和域名,然后写了一个静态的网页,准备把这个静态的网页放到服务器上去,这样的话,任何人输入网址,都可以看到我写的这个静态网页:于是这两天一直在研究这东西要怎么做才能实现,零零散 ...

  10. 如何和你相处?——今目标

    引言     从我们刚进入提高班的时候我们就接触了今目标,当时我们就对今目标非常的敬畏,其实就是害怕,因为今目标 的使用有非常多的要求,当时也是非常的不能理解米老师的良苦用心,非常不能理解为什么我们提 ...

最新文章

  1. R语言包_manipulate
  2. 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
  3. cephfs 挂载 卸载
  4. 0x80070659系统策略禁止这个安装 vc_教你一招,解决所有系统丢失DLL文件的问题!...
  5. 使用labelme制作自己的深度学习图像分割数据集
  6. 怎样做一个真正的男人
  7. java与java ee_Java EE6装饰器:在注入时装饰类
  8. FontAwesome图标大全
  9. CXF处理Date类型的俩种方式
  10. 修改spring Boot启动时的默认图案Banner
  11. Java项目毕业设计:基于springboot+vue的旧物置换网站
  12. 收集可用的关于英语单词api
  13. Linux Vmware CentOS 制作yum本地资源库和局域网资源库
  14. 为什么我的背景图片加载不出来
  15. 程序员是一种优秀的男朋友
  16. python读取.tsv文件例子(大文件处理)
  17. BloomFilter--理解总结
  18. 不限文章大小!英文文章的编码和解码(C语言,哈夫曼编码)
  19. 刘强东:我请你来,不是让你证明我错了!
  20. [摘录]第四部分 教训篇(1)

热门文章

  1. [codeforces 760B]Frodo and pillows
  2. Eureka自我保护机制原理及作用enable-self-preservation
  3. java银行项目服务器代码_基于jsp的银行账户-JavaEE实现银行账户 - java项目源码
  4. JAVA课程1hola,word
  5. Beyond Compare设置默认编码、每行字符个数、自动换行
  6. 不能设置 19寸显示 屏分辨率为 1440*900 的神器到来了
  7. 用户帐户控制组策略和注册表项设置
  8. 文华财经多个非常实用的期货指标公式,文华财经支撑压力自动画线公式
  9. python获取期货数据_【python量化】期货ML策略(一)数据获取
  10. BugkuCTF:宽带泄露;隐写2