外部,标题,全局变量

时间:2014-09-24 10:14:06

标签: c header global-variables extern

我正在制作游戏,我的程序的当前结构如下......

prog structure

我遇到的问题是我在init_game.c中有一个功能,用必要的数据初始化播放器板,一旦我有这些初始化的板,我需要the_game.c来使用这些初始化董事会(来自init_game.c)。

我对如何使用extern

的方式感到困惑

编辑:澄清 - 我想知道如何在我的程序结构中使用extern关键字,以允许我使用初始化的播放器2D char数组(在文件init_game.c中初始化,但首先在attributes.h文件中定义)在文件the_game.c

在下面添加了一张图片,以澄清我的问题... enter image description here

2 个答案:

答案 0 :(得分:1)

这清楚地表明您的程序设计存在缺陷。然后,正确的解决方案是修复程序设计,而不是使用全局变量实现意大利面条编码。

使用它的最好方法是使用面向对象的设计,通过创建“类”或“ADT”或“代码模块”(这些东西在C中基本上意味着相同的东西,因为没有类关键字)。每个这样的类都包含一个.h文件和一个.c文件。使用面向对象的概念来保​​持类的自主性,只执行特定任务而不关心世界其他地方。使用私有封装并将所有被视为公共的内容放在.h文件中。

  • 游戏是项目中的一个类。因此,与游戏相关的所有内容都应该属于该类。
  • 初始化游戏绝对与游戏类有关,因此代码应该与game.h合并。将它放在自己的文件中是没有意义的。
  • 如果其中任何一个文件包含不属于游戏类的项目,则需要将这些项目移动到自己的文件中。
  • 如果游戏类被证明过于复杂,它很可能会,你需要将游戏的各种属性分成子类。例如,一个用于处理板的类,一个用于处理玩家的类等。
  • 如果你的程序设计是正确的,那么任何地方都不应该有任何全局变量。如果您发现自己使用extern关键字,则您的程序设计存在缺陷。请注意,静态文件范围变量可以很好地使用(尽管考虑线程安全问题)。

答案 1 :(得分:0)

init_game.c中,声明全局变量,

char player_board[BOARD_SIZE][BOARD_SIZE];
char enemy_board[BOARD_SIZE][BOARD_SIZE];

任何包含attributes.h的文件都可以访问这些数组,前提是该文件没有声明另一个具有相同名称的变量。

main中,您需要确保在调用使用全局数组的init_game.c中的任何函数之前从the_game.c调用初始化函数。