提问人:Johnny 提问时间:6/2/2023 最后编辑:Johnny 更新时间:6/4/2023 访问量:150
用 Betty 风格用 C 语言编写游戏时如何避免使用全局变量?
How to avoid using global variables when coding a game in C with the betty style?
问:
我是编码新手,从C开始。我正在尝试重现著名的贪吃蛇游戏,目前正在使用 betty 风格的编码。显然,全局变量是不允许的,到目前为止,我想到的是将我的变量作为函数参数传递,但我不喜欢它,因为这似乎是一种相当糟糕的编码实践。我该怎么做?
我将不同源文件中使用的变量声明为头文件中的全局变量。到目前为止,它的工作原理,但贝蒂不允许使用全局变量
答:
1赞
Allan Wind
6/4/2023
#1
纯函数,即结果仅取决于其参数的函数(以及相同的输入结果在相同的输出中),导致程序易于推理和扩展测试。这是一件值得努力的好事。保持论点数量合理通常被认为是很好的风格。为此,您可以将大型函数分解为执行一件事的较小函数,并将相关变量分组到可以轻松传递的 (s) 中:struct
enum direction { UP, RIGHT, DOWN, LEFT };
struct position {
unsigned x;
unsigned y;
};
struct state {
enum direction dir;
struct position pos;
};
void update(struct state *s) {
if(s->dir == UP)
s->pos.y--;
// ...
}
另一种选择可能是创建全局变量,以便只能在给定文件中访问它们。static
如果你是混沌邪恶的类型,那么比全局变量更糟糕的是外部状态:文件、数据库或外部服务。您的数据的生存期现在超过了程序,并且您的数据可能会被可能与您的程序同时访问的其他程序访问。
评论
#define
int* globalValue(void) { static int value = 0; return &value; }
struct game_state
struct
main
struct