优化这段代码 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]); }
时间: 2023-12-10 08:42:16 浏览: 19
可以将每种情况下的 LCD_DisString_Not 函数调用提取出来,放到一个数组中,然后根据 i 的值直接调用相应的函数,代码如下:
```c
void (*lcd_funcs[])(uint8_t, uint8_t, char*) = {
LCD_DisString_Not,
LCD_DisString_Not,
LCD_DisString_Not,
LCD_DisString_Not,
NULL, // 4
NULL, // 5
NULL, // 6
NULL, // 7
NULL, // 8
NULL, // 9
NULL, // 10
NULL, // 11
LCD_DisString_Not,
LCD_DisString_Not,
NULL, // 12
LCD_DisString_Not,
LCD_DisString_Not,
LCD_DisString_Not,
NULL, // 18
NULL, // 19
LCD_DisString_Not,
LCD_DisString_Not
};
void show_serial_info(int serialid) {
for (int i = 0; i < 22; i++) {
if (lcd_funcs[i] != NULL) {
lcd_funcs[i]((i%9)+1, 15, (char *)gRunPara.COMMS_SerialInfo[serialid][i].val);
}
}
}
```
可以看到,我们将每种情况下的函数调用放到了一个指针数组 lcd_funcs 中,然后根据 i 的值来调用相应的函数。其中,数组中的 NULL 表示该情况下不需要调用任何函数。最后,将整个 if-else 分支结构替换成了一个函数调用 show_serial_info。这样可以使代码更加简洁易懂。