c - "Rules"是否使用全局变量

标签 c performance global-variables local-variables

<分区>

我对在 C 编程语言中使用全局变量有一些疑问。这些天我从来没有太多不再使用全局变量。所以,我的问题是:在 C 中何时使用或不使用全局变量?有人可以给我一些解释吗?性能问题当然应该包括在内。

一个更具体的案例来帮助回答这个问题:例如,如果我有一个全局数组,其中包含 struct,程序几乎所有函数都可以访问它,我需要得到两个成员每个函数调用这个数组。在这种情况下,我需要为我想要访问的数组中的成员创建两个变量(指针)。像这样 foo_t *x,*y。在程序运行时,它会发生多次并以不同的功能出现。在这种特定情况下,应该是 xy 全局变量还是局部变量(调用它的每个函数的)?

有些人认为它对计算机内存和程序性能来说太昂贵了。

我希望这是清楚的。

最佳答案

大多数时候,可维护性比性能更重要。你没有太多描述你的应用程序,所以我假设它不是性能关键,也没有堆栈大小有限等问题。即可维护性获胜。

在那种情况下,真正的问题是使代码更清晰,并减少出错的机会。这是个案决定,尽管我的一般规则是尽量减少全局变量,尤其是具有多个文件范围的全局变量。

如果应用程序是多线程的,事情会变得更加清晰 - 也更加令人兴奋。每个全局变量必须是 const,或者受某个锁保护。这包括用“static”声明的变量。只有真正共享的东西才能全局化,让您的生活更轻松。

回到您的案例 - 您有某种大型全局数据结构数组,以及其中的一些特定位置。显然,一大堆例程将在相同的位置上运行;否则这个问题就没有意义。我会做任何使代码最清晰易读的事情。根据您的描述,这可能是为了使它们全局化,但您没有提供足够的细节让我确定。如果你确实让它们成为全局性的,看在老天的份上不要称它们为 x 和 y,除非这些名称具有清晰和明显的意义 - 例如如果它们一起代表笛卡尔坐标。

关于c - "Rules"是否使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753460/

相关文章:

c++ - 视频/音频编码/解码/播放

c++ - 什么是C++中的不确定行为?与未定义的行为有何不同?

visual-studio-2010 - 在我的 VS 中找不到性能资源管理器

r - 计算日期范围间隔的部分重叠数

C++ 未知名称类型

php - 在 php 初始化时定义 php 变量

c - 当我使用 int array[10] = {0}; 初始化时,数组存储在哪里?

C链表头指向自己?

c# - MySQL插入/更新记录非常慢

php - PHP 中全局变量的替代方案