读书人

小弟我该如何避免使用全局变量

发布时间: 2013-07-04 11:45:32 作者: rapoo

我该怎么避免使用全局变量
dsp上的串口接收来的命令,判断命令号来执行不同的动作

switch(gSciRecBuf[2])
{
case CMD_TEST_REDAY:
Sci_TestReady(gSciRecBuf[3]);
break;
case CMD_MOVE_WITH_PRINT: //0x01
Sci_MoveWithPrint(gSciRecBuf[3]);
break;
case CMD_MOVE_WITH_NOPRINT:
Sci_MoveWithNoPrint(gSciRecBuf[3]);
break;
case CMD_STOP_PRINT: //0x10
Sci_StopPrint(gSciRecBuf[3]) ;
break;
case CMD_RETURN_CURRENT_POSITION:
break;
case CMD_RETURN_ACTION_RESULT:
break;
case CMD_MOVE_TO_ORIGIN:
Sci_MoveToOrigin(gSciRecBuf[3]);
break;
case CMD_MOVE_TEST:
Sci_MoveTest(gSciRecBuf[3]) ;
break;
case CMD_DSP_HANDSHAKE:
Sci_PC_ReturnHandShake(gSciRecBuf[3]);
break;
case CMD_BREAKLINE:
Sci_PC_ReturnBreakLine(gSciRecBuf[3]) ;
break ;
case CMD_SET_Z_SPEED:
Sci_Set_Z_Speed(gSciBufToSend[3]) ;
break ;
default:
break;
}

我现在是在相应的函数里设置一个全局变量(如果需要的话), 但全局变量多了, 我自己都觉得难受
例如
void Sci_PC_ReturnHandShake(Uint16 framenum)
{
gPC_ReturnHandShake = 1 ;
}


这些函数都是根据串口中断接收来的数据进行相关处理的
我想去掉这些全局变量, 但不知道该怎么改, 主函数里才可以及时的得知执行了此函数

[解决办法]
能不能不使用全局变量取决于你的程序结构,只看这段代码是分析不出来的。



全局变量其实就是用来在两段代码之间交换数据用的,除了使用全局变量,还可以使用参数、返回值、回调函数(其实还是参数和返回值)、Windows消息、线程间用Event。

使用全局变量也有不同的用法,可以简单地定全局变量,也可以向1楼所说的把相关的变量封装为一个结构而改用全局结构变量,复杂点的作法还有使用全局队列、全局查找表等等,一切由你的需求决定。
[解决办法]

引用:
Quote: 引用:


int* GetReturnHandShake()
{
static int recturnHandShake;
return &recturnHandShake;
}


这样的话,有办法在其他地方修改这个变量吗


当然可以修改, 返回的是指针, 不是值的吗. 修改的时候用
*GetReturnHandShake() = xxx 就可以了.

读书人网 >C语言

热点推荐