编码应该运筹帷幄之中,决胜千里之外
正文
大家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
總結
以上是生活随笔為你收集整理的编码应该运筹帷幄之中,决胜千里之外的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老闪创业那些事儿(27)——员工定级标准
- 下一篇: 25 OPENVINO intermed