通过使用指针传递函数来修改函数内的全局变量是一个好习惯吗?

时间:2018-02-23 02:20:45

标签: c

globals.h
unsigned char csrf;
unsigned char srevf;
pcs.c
void PcsTxFlags(unsigned char*pCsrf, unsigned char*psrevf,
                 unsigned char penablef0,unsigned char penablef2, 
                 unsigned char penablef4)
    {
       *pcsrf =penablef2 & (penablef0 ? 0:1);
       *psrevf = penablef2 ^ penablef4;
    }
main.c
int main(void)
 {
   PcsTxFlags(&csrf,&srevf,penablef0 ,penablef2 ,penablef4);
}

我得到了正确的结果。众所周知,不需要传递全局变量,可以在函数内修改它而不传递它。因此,通过使用指针将其作为参数传递来修改函数内的全局变量是一个好习惯。

1 个答案:

答案 0 :(得分:0)

这不是一个经常被用来成为一种练习的东西。全局变量正在被修改 - 无论你在哪里散布可以修改变量的点,它的所有缺点都会随之而来。(难以管理代码,跟踪bug等)。

然后我也会说,基于场景和函数中实现的功能 - 通过指针传递留下重用函数的范围。如果您直接使用全局变量,则再次使用它(函数)的范围很小。有时需要这样做 - 例如,您正在使用库进行xml解析。即使您将数据结构放在全局,也必须通过调用提供的api来修改它。(传递全局变量的地址)。

为实现看似微不足道的工作,有太多的全局变量也是不好的做法。现在这项琐碎的工作是主观的和背景的。