编码应该运筹帷幄之中,决胜千里之外
正文
大家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
编码应该运筹帷幄之中,决胜千里之外相关推荐
- 运筹学试题-运筹帷幄,决胜千里之外!
- 面试官:了解雪崩效应吗?了解Hystrix吗?怎么解决雪崩效应吗?(大型社死现场,教你运筹帷幄之中)
上篇我们模拟了高并发场景下,系统资源被耗尽导致其他接口访问非常之慢.至此,这篇给出了五种解决方案(当然这个是次要的,主要还是理解原理) 上篇地址:https://blog.csdn.net/Kevin ...
- 决胜千里之外:选购优秀邮件服务器 让企业站得更高
纵观IT技术的快速发展.电子商务国际化愈演愈烈.近几年来,企业邮箱在信息化管理的重要应用及发展潜质,让互联网巨头也纷至沓来,各大邮件服务器软件供应商都已门庭若市.然而,邮件系统种类繁多,各自优劣不同, ...
- 想把静态网页放到服务器上,怎么样让所有人都去访问到
前两天自己买了百度云服务器和域名,然后写了一个静态的网页,准备把这个静态的网页放到服务器上去,这样的话,任何人输入网址,都可以看到我写的这个静态网页:于是这两天一直在研究这东西要怎么做才能实现,零零散 ...
- 运筹说 第5期 | 运筹学江湖的形成
运筹说 第5期 | 运筹学江湖的形成 01 运筹学江湖起源--有人存在的地方就是江湖. 运筹学作为一门现代科学,是在第二次世界大战期间首先在英美两国发展起来的,江湖上大多学者把运筹学描述为就组织系统的 ...
- 如何在服务器上部署静态网页,让所有人都能访看到?
前两天自己买了百度云服务器和域名,然后写了一个静态的网页,准备把这个静态的网页放到服务器上去,这样的话,任何人输入网址,都可以看到我写的这个静态网页:于是这两天一直在研究这东西要怎么做才能实现,零零散 ...
- B4:Unity制作Moba类游戏——小兵AI系统
若想取得战争的胜利,必先控好兵线. ---- 麦克阿瑟 是时候让敌人经历一下我们兵线的洗礼. ---- 拿破仑 在LOL对局中,职业选手对兵线的控制可以说是达到了"运筹帷幄之中,决胜千里之外 ...
- 马云如刘邦一样运用人才
我智商不高,我把这世界上智商非常高的人都请到了阿里巴巴:我不懂财务,我把财务最好的人请来:我不懂技术,把技术最好的人请来.把他们请来,用我们的情商把大家团结在一起,形成一个团队,让大家开心快乐,建立一 ...
- 有了服务器,域名,如何将静态网页放到服务器上,让所有人都能访看到?
前两天自己买了百度云服务器和域名,然后写了一个静态的网页,准备把这个静态的网页放到服务器上去,这样的话,任何人输入网址,都可以看到我写的这个静态网页:于是这两天一直在研究这东西要怎么做才能实现,零零散 ...
- 如何和你相处?——今目标
引言 从我们刚进入提高班的时候我们就接触了今目标,当时我们就对今目标非常的敬畏,其实就是害怕,因为今目标 的使用有非常多的要求,当时也是非常的不能理解米老师的良苦用心,非常不能理解为什么我们提 ...
最新文章
- R语言包_manipulate
- 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)
- cephfs 挂载 卸载
- 0x80070659系统策略禁止这个安装 vc_教你一招,解决所有系统丢失DLL文件的问题!...
- 使用labelme制作自己的深度学习图像分割数据集
- 怎样做一个真正的男人
- java与java ee_Java EE6装饰器:在注入时装饰类
- FontAwesome图标大全
- CXF处理Date类型的俩种方式
- 修改spring Boot启动时的默认图案Banner
- Java项目毕业设计:基于springboot+vue的旧物置换网站
- 收集可用的关于英语单词api
- Linux Vmware CentOS 制作yum本地资源库和局域网资源库
- 为什么我的背景图片加载不出来
- 程序员是一种优秀的男朋友
- python读取.tsv文件例子(大文件处理)
- BloomFilter--理解总结
- 不限文章大小!英文文章的编码和解码(C语言,哈夫曼编码)
- 刘强东:我请你来,不是让你证明我错了!
- [摘录]第四部分 教训篇(1)
热门文章
- [codeforces 760B]Frodo and pillows
- Eureka自我保护机制原理及作用enable-self-preservation
- java银行项目服务器代码_基于jsp的银行账户-JavaEE实现银行账户 - java项目源码
- JAVA课程1hola,word
- Beyond Compare设置默认编码、每行字符个数、自动换行
- 不能设置 19寸显示 屏分辨率为 1440*900 的神器到来了
- 用户帐户控制组策略和注册表项设置
- 文华财经多个非常实用的期货指标公式,文华财经支撑压力自动画线公式
- python获取期货数据_【python量化】期货ML策略(一)数据获取
- BugkuCTF:宽带泄露;隐写2