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;
}

将分支的选择,变成了对数组的引用。既能缩短代码,又能提高效率,然后既然是数组,那就最好做一个保护措施,防止越界。

相关推荐
青出于兰3 分钟前
C语言| 指针变量的自增运算
c语言·开发语言
d111111111d14 分钟前
STM32平衡车开发计划2-电机编码器测速
笔记·stm32·单片机·嵌入式硬件·学习
枫叶丹444 分钟前
【Qt开发】Qt事件(一)
c语言·开发语言·数据库·c++·qt·microsoft
宵时待雨2 小时前
C语言笔记归纳20:文件操作
c语言·开发语言·笔记·算法
superman超哥10 小时前
仓颉语言中锁的实现机制深度剖析与并发实践
c语言·开发语言·c++·python·仓颉
夜月yeyue10 小时前
Linux 调度类(sched_class)
linux·运维·c语言·单片机·性能优化
日更嵌入式的打工仔10 小时前
实用:嵌入式执行时间测量常用方法
笔记·单片机
json{shen:"jing"}11 小时前
1-C语言的数据类型
c语言·c++·算法
dreamczf11 小时前
如何确定项目中的产品选型-物联网设备
单片机·物联网·嵌入式软件
名誉寒冰11 小时前
GDB 调试与 Core Dump(段错误)排查指南(Linux/C/C++)
linux·c语言·c++