C语言 switch case 语句优化方案其一

这篇具有很好参考价值的文章主要介绍了C语言 switch case 语句优化方案其一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源switch例程

               这是一个用于计时的函数,细心的朋友应该可以发现,这段代码还隐藏一段 if 语句的优化方案,那就是提前return,干掉else。

               结构体内容如下:

typedef struct {
volatile    unsigned long Time_Cnt;
volatile    unsigned int  time;
volatile    unsigned char flag;
}Tick_OBJ;
unsigned char Tick_Time(Tick_OBJ* t){ 
	 
	if(t->time==0){ 
    t->time=0; t->Time_Cnt=0; 
    return 1;
	}
  /*计数时间大于0时*/
  
   switch(t->flag){ //检差小数点标志位置 
			case 0: if(++t->Time_Cnt>=2)			  {t->Time_Cnt=0;t->time--;} break; //10ms
			case 1: if(++t->Time_Cnt>=20)			  {t->Time_Cnt=0;t->time--;} break; //100ms
			case 2: if(++t->Time_Cnt>=200)		  {t->Time_Cnt=0;t->time--;} break; //1s
			case 3: if(++t->Time_Cnt>=12000)	  {t->Time_Cnt=0;t->time--;} break;//1分钟  这些是定时器时钟为1ms的,模式扫描为5ms一次
      case 4: if(++t->Time_Cnt>=720000)	  {t->Time_Cnt=0;t->time--;} break;//1小时
			default:			return 1;                                           
		}
	return 0; //计时没有结束返回0
}

当case语句较少的时候还能接收,假如很多的时候就会难以维护,这里提供一种思维。

优化后

unsigned char Get_Tick_Time(Tick_OBJ* t){
    unsigned long time_f[FLAG_NUM]={2,20,200,12000};
 	if(t->time == 0){ // 
    return 1;
	}
//   if(t->flag < FLAG_NUM){ //防止单位参数错误
     ++t->Time_Cnt>=time_f[t->flag] ? t->time--,t->Time_Cnt=0 : (void)0 ;     
//   }
   return 0;
}

        将分支的选择,变成了对数组的引用。既能缩短代码,又能提高效率,然后既然是数组,那就最好做一个保护措施,防止越界。文章来源地址https://www.toymoban.com/news/detail-811950.html

到了这里,关于C语言 switch case 语句优化方案其一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 揭秘Java switch语句中的case穿透现象

    导语:在 Java 开发中,我们经常使用 switch 语句来进行条件判断和分支选择。然而,有一个令人困惑的现象就是,当某个 case 语句没有加上 break 时,程序会继续执行下一个 case 语句,这被称为 case穿透现象 。本文将揭秘 case穿透现象 的原因,并解释为何会出现这种行为

    2024年02月06日
    浏览(49)
  • switch语句每个case后一定要有break吗?

    java和c/c++差不多,就用java代码解释吧 先说结论:不一定要break!!! 如果case后面没有break,那么则会无视下个case的条件执行下一个case,直到再次出现一个break跳出循环 上对比代码: 代码的意思就是键盘输入一个a,如果a=1,就执行case中的内容。 我们输入1,结果是2(如图:

    2024年02月11日
    浏览(35)
  • C# switch case语句入门and业务必知点

    具体的语法形式如下。 switch(表达式) {     case 值 1:         语句块 1;         break;     case 值 2:         语句块 2;         break;         ...     default:         语句块 n;         break; } 在这里,switch 语句中表达式的结果必须是整型、字符串类型、字符型、布尔型等数据

    2023年04月21日
    浏览(56)
  • C++类模板实现工厂模式(优化if else/switch case)

    引自:https://blog.csdn.net/weixin_43795921/article/details/127224633 template typename IdentifierType, class AbstractProduct, class ProductCreator = AbstractProduct *(*)(), class MapContainer = std::mapIdentifierType, ProductCreator class Factory { public: bool Register(const IdentifierType id, ProductCreator creator) { return producers_.insert(std::make

    2024年02月13日
    浏览(56)
  • 【算法笔记】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

    求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)、位运算、递归、公式、sizeof。 习题链接:题目链接 该题把我们的所有能用的方法都给限制死了,我们只能用一些的特殊的方法来做。不知道大家在思考的过程中考没考虑过

    2024年02月07日
    浏览(63)
  • 【C语言】switch语句的理解

    任何具有判定能力的语法结构,都必须具备 判定+分支 功能 在 switch 语法结构中: case 完成的判定功能 break 完成的是分支功能 default 处理异常情况 举例 根据输入的数字,打印出今天是星期几 编译运行: 每次写 switch 语句时,即使程序真的不需要 default 处理,也应该保留以下

    2023年04月09日
    浏览(40)
  • C语言——分支语句(if,switch)

    前言:这篇博客,主要想从 理解分支语句,语句的执行过程和书写 以及一些 注意事项 来谈谈 分支语句 🎬 个人简介:努力学习ing 📝 CSDN主页 愚润求学 🌄 每日鸡汤: 我走的很慢,但我从不后退 目录 一,if语句 注意事项 二,switch语句 我们如何理解分支语句是什么? 分

    2024年02月06日
    浏览(58)
  • (上) C语言中的语句分类及分支语句:if语句、switch语句介绍

    目录 前言 一、语句的分类 1. 空语句 2. 表达式语句 3. 函数调用语句 4. 复合语句 5. 控制语句 二、分支语句 1. if语句 (1) if的使用 (2) else的使用 (3) 分支中包含多条语句 (4) 嵌套if (5) 悬空else问题 2. switch语句 (1) if语句和switch语句的对比 (2) switch语句中的break (3) switch语句中的defa

    2024年01月22日
    浏览(70)
  • 【C语言初阶】switch语句的基本语法

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,又是新的一天开始了,今天给大家带来的switch语句的全面讲解!    ⛳️ 预计博主这俩天会把分支语句和循环语句给彻底

    2024年02月14日
    浏览(37)
  • C 语言中的 switch 语句和 while 循环详解

    替代多重 if..else 语句,可以使用 switch 语句。 switch 语句用于选择多个代码块中的一个来执行 switch 表达式只会被计算一次 表达式的值与每个 case 的值进行比较 如果找到匹配,则执行相应的代码块 break 语句用于跳出 switch 块并停止执行 default 语句是可选的,如果找不到匹配的

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包