优化这段代码 if(gRunPara.COMMS_SerialInfo[serialid][i].val == 0) LCD_DisString((i%9)+1, 15, (char *)"退出"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 1) LCD_DisString((i%9)+1, 15, (char *)"101平"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 2) LCD_DisString((i%9)+1, 15, (char *)"101非"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 3) LCD_DisString((i%9)+1, 15, (char *)"104"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 4) LCD_DisString((i%9)+1, 15, (char *)"CDT"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 5) LCD_DisString((i%9)+1, 15, (char *)"DNP3.0"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 6) LCD_DisString((i%9)+1, 15, (char *)"MudBus"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 7) LCD_DisString((i%9)+1, 15, (char *)"GSM"); else if(gRunPara.COMMS_SerialInfo[serialid][i].val == 8) LCD_DisString((i%9)+1, 15, (char *)"线损通讯");
时间: 2023-11-22 12:54:49 浏览: 27
可以将不同的 val 值对应的字符串保存在一个数组中,然后使用 val 值作为索引来获取对应的字符串,从而避免大量的重复代码。示例如下:
```
char* comms_strings[] = {"退出", "101平", "101非", "104", "CDT", "DNP3.0", "MudBus", "GSM", "线损通讯"};
LCD_DisString((i%9)+1, 15, comms_strings[gRunPara.COMMS_SerialInfo[serialid][i].val]);
```
相关问题
优化这段代码 if( i == 0 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdComPcl[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 1 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdComBaud[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 2 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszComParity[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 3 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszStateName1[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 13 || i == 14) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszPoint[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 15 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszData[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 16 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdJmMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 17 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdAreaMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 20 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdSynctmMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); } else if( i == 21 ) { LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdRSMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]); }
可以将这段代码进行优化,使用一个 switch case 语句来替代多个 if else 语句。具体实现代码如下:
```c
switch (i) {
case 0:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdComPcl[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 1:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdComBaud[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 2:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszComParity[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 3:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszStateName1[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 13:
case 14:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszPoint[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 15:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszData[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 16:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdJmMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 17:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdAreaMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 20:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdSynctmMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
case 21:
LCD_DisString_Not((i%9)+1, 15, (char *)gcszLcdRSMode[(int)gRunPara.COMMS_SerialInfo[serialid][i].val]);
break;
default:
break;
}
```
使用 switch case 语句可以让代码更加简洁明了,易于维护和修改。
优化这段代码 if (draw == k+1) { if( k == 0 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<8) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 1 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<9) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 2 || k == 7 || k == 18 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<2) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 6 || k == 8 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<2) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 3 || k == 13 || k == 14 || k == 16 || k == 20 || k == 21 ) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<1) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else if( k == 15 || k == 17) { if (gRunPara.COMMS_SerialInfo[serialid][k].val<2) ++gRunPara.COMMS_SerialInfo[serialid][k].val; change = 1; } else change = Lcd_Modify_Param(LCD_KEY_ADD,ALTER_SERI,UNIT_PUBLIC_MX6,serialid,k,j); }
可以将一些重复的代码提取出来,避免代码冗余,例如可以将以下代码块提取出来:
```
if (gRunPara.COMMS_SerialInfo[serialid][k].val < x) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
}
```
然后在原代码中使用该代码块进行替换,可以得到下面的优化代码:
```
if (draw == k+1) {
if (k == 0) {
change = Lcd_Modify_Param(LCD_KEY_ADD, ALTER_SERI, UNIT_PUBLIC_MX6, serialid, k, j);
} else if (k == 1 || k == 6 || k == 8) {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 2) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
}
} else if (k == 2 || k == 7 || k == 18) {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 2) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
}
} else if (k == 3 || k == 13 || k == 14 || k == 16 || k == 20 || k == 21) {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 1) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
}
} else if (k == 15 || k == 17) {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 2) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
}
} else {
if (gRunPara.COMMS_SerialInfo[serialid][k].val < 8 && k == 0 || gRunPara.COMMS_SerialInfo[serialid][k].val < 9 && k == 1) {
++gRunPara.COMMS_SerialInfo[serialid][k].val;
change = 1;
} else {
change = Lcd_Modify_Param(LCD_KEY_ADD, ALTER_SERI, UNIT_PUBLIC_MX6, serialid, k, j);
}
}
}
```