这可能是一个愚蠢的问题,但我正在审查一些代码,我只是没有看到这个人在做什么的重点。在一个C文件中,他定义了一个具有许多类型的许多元素的全局结构。因此,从函数“A”调用函数“B”。在调用中,它们传递指向全局结构的指针,然后在函数“B”中完成一些操作并更新全局的一部分。现在这似乎是多余的过度杀伤,因为它已经是一个全球性的。如果结构是函数“A”的局部结构,我可以完全看到将地址传递给结构到函数“B”。但是,内存永久分配在C文件的最顶层。事实上,我可以争辩说,其他人在改变某些事情并且没有意识到他们已经创造了一个错误时存在潜在的问题。
所以我确信有一个“良好的编码练习”BKM或类似的东西,但这样我却看不到它。那么简而言之,为什么创建一个地址指针并在变量已经是全局变量时不必要地将其传递给函数?
答案 0 :(得分:11)
传递指针是好的风格,主要是因为全局变形是坏的风格。也许最初的开发人员正在考虑全局可能不是全局的,或者接受它的函数可能在不同的变量上运行(可能也可能不是全局变量,但仍需要识别)。
答案 1 :(得分:1)
如果结构实例是全局的,并且两个代码文件可以访问它,那么显然这是一些不需要的编码。但可能有一种情况是,之前的开发人员计划创建其他实例,在这种情况下,他的功能可重用性受到了挑战。
在函数交互过程中使用对结构的引用是一个很好的做法,但如果没有未来的大规模代码更改计划,那么直接使用全局变量并不是一个坏主意。
答案 2 :(得分:1)
功能B很可能是为了重用性而编写的,无论出于何种原因,它都没有真正重复使用。
理想情况下,函数应该通过参数和返回值(以及支持的异常)相互通信,而不是共享全局数据。这使您可以更轻松地在不存在全局数据变量(或具有不同名称)的其他程序中重用代码。
如果你真的挤压了堆栈空间,或者有一些其他真正的技术限制,使得使用全局数据比传递参数更有吸引力/更便宜的选项,那么全局变量是正确的回答,但那应该是罕见的。