我真的需要访问函数来访问另一个文件中的全局变量吗?

问题描述 投票:0回答:1

在我的代码(游戏引擎代码)中,有多个源文件(.c)来维护游戏的状态,状态如

START
CONFIGURE
STOP
END
DEFAULT
RUNNING

维持状态,一个全局变量 gameStatus 在多个源文件之间共享,使用 extern 现在我读到全局变量不好用,它允许外部模块改变它,而且随着使用全局变量的组件数量增加,交互的复杂性也会增加。

所以我把这个变量的范围限制在一个文件中,用 static 关键字,并增加了像 get or set APIs 在同一个文件中。所以其他文件只能通过访问器API来访问该变量。

我已经删除了全局变量,这是很好的,但现在每个使用全局变量的文件都必须调用访问API,这似乎增加了函数调用的开销。

所以现在我很困惑,到底哪种方式更好呢?有什么C语言的标准可以告诉我如何有效地在不同的源文件之间共享数据吗?

c global-variables
1个回答
1
投票

全局变量是 "不好的做法 "完全是见仁见智,100%取决于上下文。如果不看你的代码,是不可能说你是否在应用这种 "坏做法 "的。全局变量不是坏做法 本身,用错误的方式使用它们是。在C语言中,全局变量往往是必要的,以C标准库为例。errno 是一个全局变量,在库代码和用户代码中基本上到处都在使用,用来检查错误。这种做法不好吗?他们能否定义一个函数 get_errno() 而不是(好吧,说实话,他们实际上是这样做的,只是隐藏了......但那是出于复杂的并发原因)?我让你来决定。

在你的具体案例中,将一个全局可见的变量改为 static 然后创建两个函数来获取和设置它的值是完全没有必要的。代码的任何部分仍然可以修改变量,但现在这样做只是比较麻烦,而且如果优化不当,还可能导致代码更慢。总而言之,通过创建这些函数,你只是把变量的 static 定语。

© www.soinside.com 2019 - 2024. All rights reserved.