我是靠谱客的博主 粗暴黑米,最近开发中收集的这篇文章主要介绍do while 里面怎么嵌套switch_C语言中switch的别样硬核玩法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

f7f83d62aa6a296b300d91862e77e944.gif

acb5d1126efe13646b73af8821fb34b3.png 前言

56ec705712c94522c53bfb193a10afb3.png

本文主要介绍的是C语言中switch的别样玩法,这是很多学习C语言的人基本都没有见过的一个冷知识,虽然不是很常用,但是希望对于广大读者学习C语言有一些帮助。

acb5d1126efe13646b73af8821fb34b3.png switch别致写法

如果你是第一次看到的话,不妨试一下,看你能得出该写法的作用吗?相信大家写业务逻辑的时候,都是面向if、else、for、while、switch编程。但是你见过switch嵌套do..while吗?

fd53f0f17bbc89deb06f7f74bc897e03.png

咋的一看,这啥鬼玩意啊,switch/while这组合能编译通过吗?您可别怀疑,还真能。这个就是达夫设备不信的同学可以拿以下代码去测试一下:

#include #include #include #include void send(int* to, int* from, int count){  int n = (count + 7) / 8;  switch (count % 8)   {  case 0:     do {      *to++ = *from++;  case 7:       *to++ = *from++;  case 6:       *to++ = *from++;  case 5:       *to++ = *from++;  case 4:       *to++ = *from++;  case 3:       *to++ = *from++;  case 2:       *to++ = *from++;  case 1:       *to++ = *from++;    } while (--n > 0);  }}void print(int array[], int count) {  for (int i = 0; i < count; i++)   {    printf("%dt", array[i]);  }  printf("n");}int main(){  int to[8] = {0};  int from[8] = { 1,2,3,4,5,6,7,8};  int count = 8;  send(to, from, count);  print(to,8);  return 0;}
acb5d1126efe13646b73af8821fb34b3.png 达夫设备(Duff's Device) 百度百科的说法:
在计算机科学领域,达夫设备(英文:Duff‘s device)是串行复制(serial copy)的一种优化实现,通过汇编语言编程时一常用方法,实现展开循环,进而提高执行效率。这一方法据信为当时供职于卢卡斯影业的汤姆·达夫于1983年11月发明,并可能是迄今为止利用C语言switch语句特性所作的最巧妙的实现。 https://baike.baidu.com/item/%E8%BE%BE%E5%A4%AB%E8%AE%BE%E5%A4%87/3771842?fr=aladdin

简单的来说:达夫设备是一个加速循环语句的C编码技巧。 其基本思想是减少循环测试的执行次数。

16a92eb5a57ea6e627012cdae18873d4.png

在卢卡斯影业上班的程序员 Tom Duff,他是想为了加速一个实时动画程序,实现从一个数组复制数据到一个寄存器这样一个功能,一般情况下,若要将数组元素复制进存储器映射输出寄存器,很多人都会想到使用如下写法:

do {  *to = *from++;            } while(--count > 0);

我们一般使用用for循环或者while循环的时候,如果执行循环内容本身用不了多少时间,本质上时间主要是消耗在了每次循环的比较语句上边。而事实上,比较语句是有很大优化空间的,我们假设你要循环10000次,结果你从第一次开始就不断的比较是否达到上界值,这是不是很徒劳呢?我们写一个达夫设备的函数就不会有这样的情况(不同测试会有不同效果,大家可以自行测试一下)

acb5d1126efe13646b73af8821fb34b3.png 知道了解即可 达夫设备确实缩短了不少时间,值得一提的是,针对串行复制的需求,标准C语言库提供了memcpy函数,而其效率不会比 斯特劳斯鲁普版 的达夫设备低,并可能包含了针对特定架构的优化,从而进一步大幅提升执行效率。所以呢,这个东西你知道了解即可。 acb5d1126efe13646b73af8821fb34b3.png 结束语 文章都是手打原创,每天最浅显的介绍C语言、C++,windows知识,喜欢我的文章就关注一波吧,每天带你学习C/C++不同的知识,也可以看到最新更新和之前发表的文章哦。

969582c14196e10d4802d02931d919a2.png

最后

以上就是粗暴黑米为你收集整理的do while 里面怎么嵌套switch_C语言中switch的别样硬核玩法的全部内容,希望文章能够帮你解决do while 里面怎么嵌套switch_C语言中switch的别样硬核玩法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部