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

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

相关推荐
阿巴~阿巴~4 小时前
冒泡排序算法
c语言·开发语言·算法·排序算法
anghost1505 小时前
基于单片机的水果自动收集车
单片机·嵌入式硬件
STC_USB_CAN_80516 小时前
实战 AI8051U 音视频播放:USART-SPI→DMA-P2P→SPI+I2S 例程详解
单片机·嵌入式硬件·音视频
ShiMetaPi7 小时前
【GM3568JHF】FPGA+ARM异构开发板烧录指南
stm32·单片机·嵌入式硬件
前路不黑暗@7 小时前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
西工程小巴9 小时前
实践笔记-VSCode与IDE同步问题解决指南;程序总是进入中断服务程序。
c语言·算法·嵌入式
Ronin-Lotus9 小时前
嵌入式硬件篇---Buck&Boost电路
单片机·嵌入式硬件
Nuyoah11klay10 小时前
华清远见25072班C语言学习day11
c语言·指针·回调函数
清风66666611 小时前
基于STM32F103单片机智能门禁热释人体感应报警设计
单片机·毕业设计·课程设计
清风66666612 小时前
基于51单片机自动智能浇花系统设计
stm32·单片机·嵌入式硬件·毕业设计·课程设计