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

标签 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);
}

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

最佳答案

嗯,这并不是一个使用太频繁而成为实践的东西。全局变量正在被修改 - 无论你如何分散可以修改变量的点,它的所有缺点都会随之而来。(难以管理代码,跟踪错误等)。

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

使用太多全局变量来完成看似微不足道的工作也是不好的做法。现在这项琐碎的工作是主观的、有背景的。

关于c - 通过使用指针传递函数来修改函数内的全局变量是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940178/

相关文章:

c - 使用CMake向Android项目添加静态库(.a文件),得到 "CMake Error: CMake can not determine linker language for target"

c - Scanf for char *路径

objective-c - Objective C : Names, 绑定(bind)和范围

c - 对象之间的 Lua 引用

c - 如何创建并行堆栈并在其上运行协程?

c - &((struct name *)NULL -> b) 会导致 C11 中的未定义行为吗?

c - Ncurses 窗口缩放

c++ - MongoDB C Driver Windows 无法解析的外部符号

c - 如何正确设置 OpenCL?

c++ - 是否可以在 C 或 C++ 中创建另一个函数?