8

这可能是一个愚蠢的问题,但我正在审查一些代码,我只是不明白这个人在做什么。在一个 C 文件中,他定义了一个具有多种类型的许多元素的全局结构。所以从函数“A”调用函数“B”。在调用中,他们传递了一个指向全局结构的指针,然后在函数“B”中完成了一些事情并更新了全局的一部分。现在这一切似乎都是多余的,因为它已经是全球性的了。如果结构是函数“A”的本地结构,我完全可以看到将结构的地址传递给函数“B”。但是,内存已在 C 文件的最顶部永久分配。

所以我确信有一个“良好的编码实践”BKM 或类似的东西可以做到这一点,但我只是看不到它。简而言之,当变量已经是全局变量时,为什么要创建地址指针并将其不必要地传递给函数?

4

3 回答 3

11

传递指针是好的风格,主要是因为全局变量是不好的风格。也许最初的开发人员正在考虑全局可能不是全局的可能性,或者接受它的函数可能对不同的变量进行操作(可能也可能不是全局的,但仍需要识别)。

于 2012-08-15T17:50:21.290 回答
1

Function B was most likely being written with an eye towards reusability, and for whatever reason was never actually re-used.

Ideally, functions should communicate with each other exclusively through parameters and return values (and exceptions, where supported), rather than sharing global data. This allows you to more easily re-use code in other programs where the global data variables are not present (or have different names).

If you're really squeezed for stack space, or have some other real technical limitation that makes using global data a significantly more attractive / less expensive option than passing arguments around, then globals are the right answer, but that should be rare.

于 2012-08-15T19:11:12.943 回答
1

如果结构实例是全局的,并且两个代码文件可以访问它,那么显然这是一些不需要的编码。但可能存在前一个开发人员计划创建其他实例的情况,在这种情况下,他的功能可重用性受到了挑战。

在函数互通期间使用对结构的引用是一个很好的做法,但是如果未来没有大规模代码更改的计划,那么直接使用全局变量并不是一个坏主意。

于 2012-08-15T17:57:39.657 回答