帮我修正一下这个代码 帮我解释 #define Digit_Expan(X,Y,Z) Z > Y ? (Z = 0, Z += X) : (Z *= 10, Z += X) #define Digit_Expan_100(X,Y) Digit_Expan(X,100,Y) void Menu_display(void) { uint16_t OldS; uint8_t Set_Wei=0; uint16_t Set_Dis[Set_Wei]; switch(Menu_Choose) { case Menu_KeyControl: if(key_val<10) { OldS=Set_Dis[Set_Wei]; Digit_Expan_100(OldS,key_val); }
时间: 2024-02-15 11:04:56 浏览: 59
这个代码有两个问题:宏定义和数组的问题。
对于宏定义,需要注意到传递参数时,`Set_Wei` 的值为 0,这会导致数组 `Set_Dis` 的大小为 0。因此,我们需要修改 `Set_Wei` 的值,并在定义数组时使用这个值。另外,宏定义中的 `Z` 参数应该是一个指针类型,以便修改传入的数组。
对于数组,我们需要定义一个足够大的数组来存储数据,以避免数组越界的问题。
修正后的代码如下:
```
#define Digit_Expan(X,Y,Z) (*(Z) > (Y) ? (*(Z) = 0, *(Z) += (X)) : (*(Z) *= 10, *(Z) += (X)))
#define Digit_Expan_100(X,Y) Digit_Expan(X,100,Y)
void Menu_display(void) {
uint16_t OldS;
uint8_t Set_Wei=10; // 修改 Set_Wei 的值
uint16_t Set_Dis[Set_Wei];
switch(Menu_Choose) {
case Menu_KeyControl:
if(key_val<10) {
OldS=Set_Dis[Set_Wei-1]; // 修改这里的下标
Digit_Expan_100(OldS,&Set_Dis[Set_Wei-1]); // 修改这里的参数
}
break;
// ...
}
}
```
阅读全文