我对在 C 编程语言中使用全局变量有一些疑问。这些天我从来没有太多不再使用全局变量。所以,我的问题是:在 C 中何时使用或不使用全局变量?有人可以给我一些解释吗?性能问题当然应该包括在内。
一个更具体的案例来帮助回答这个问题:例如,如果我有一个全局数组,其中包含 struct
,程序几乎所有函数都可以访问它,我需要得到两个成员每个函数调用这个数组。在这种情况下,我需要为我想要访问的数组中的成员创建两个变量(指针)。像这样 foo_t *x,*y
。在程序运行时,它会发生多次并以不同的功能出现。在这种特定情况下,应该是 x
和 y
全局变量还是局部变量(调用它的每个函数的)?
有些人认为它对计算机内存和程序性能来说太昂贵了。
我希望这是清楚的。
大多数时候,可维护性比性能更重要。你没有太多描述你的应用程序,所以我假设它不是性能关键,也没有堆栈大小有限等问题。即可维护性获胜。
在那种情况下,真正的问题是使代码更清晰,并减少出错的机会。这是个案决定,尽管我的一般规则是尽量减少全局变量,尤其是具有多个文件范围的全局变量。
如果应用程序是多线程的,事情会变得更加清晰 - 也更加令人兴奋。每个全局变量必须是 const,或者受某个锁保护。这包括用“static”声明的变量。只有真正共享的东西才能全局化,让您的生活更轻松。
回到您的案例 - 您有某种大型全局数据结构数组,以及其中的一些特定位置。显然,一大堆例程将在相同的位置上运行;否则这个问题就没有意义。我会做任何使代码最清晰易读的事情。根据您的描述,这可能是为了使它们全局化,但您没有提供足够的细节让我确定。如果你确实让它们成为全局性的,看在老天的份上不要称它们为 x 和 y,除非这些名称具有清晰和明显的意义 - 例如如果它们一起代表笛卡尔坐标。