2

我正在使用一些使用许多全局变量的旧代码。我完全了解使用全局变量的许多缺点,所以我的问题不在于我是否应该使用全局变量。

在查看了大部分代码后,我注意到了两种模式,我试图确定哪一种更糟以及为什么。

两种模式之间的相似之处在于全局变量使用“extern”公开。

两种模式的主要区别在于:

  1. 一些全局变量在头文件中被外部/公开,而这些头文件又包含在许多带有#include 的源文件中

  2. 其他全局变量直接在源文件本身中外部/公开

你认为这两个中哪一个比另一个更糟糕?为什么?

你会认为它们同样糟糕吗?为什么?

4

2 回答 2

1

我倾向于认为 C 头文件属于以下三类之一:公共、私有和受保护(不要与 C++ 关键字或相同名称混淆)。Public 适用于任何人都可以访问的任何内容。Private 用于仅用于模块内部实现的所有内容(如果拆分为多个文件);这些在模块之外永远不可见。受保护的是那些通常不希望被另一个模块访问但由于某种原因需要访问的项目(模块耦合可能在此处发生)。

对我来说,在 C 源文件中而不是头文件中的符号(例如全局变量)违反了这些“规则”,并被解释为代码异味。

希望这可以帮助。

于 2013-07-11T00:38:39.300 回答
1

1)隐藏你可以隐藏的东西。如果它们不需要可见,则不允许人们使用它们(通过提供他们的声明)。

2)如果不需要 extern ,请使用 static 并且......隐藏你可以隐藏的东西。

你认为这两个中哪一个比另一个更糟糕?为什么?

首先; 因为它对其他翻译不必要地可见。第二个可能导致链接器错误,但需要内部知识才能在另一个源/翻译中正确使用。然后可以通过制作链接器问题来解决static(同样,如果它的声明对一个翻译可见)。

你会认为它们同样糟糕吗?为什么?

不。如果您可以隐藏全局变量的实现并限制他们的访问,那么您已经帮了您的代码库一个忙。

于 2013-07-10T23:23:31.317 回答