源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语句较少的时候还能接收,假如很多的时候就会难以维护,这里提供一种思维。文章来源:https://www.toymoban.com/news/detail-811950.html
优化后
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模板网!