在C中使用extern有什么问题?

时间:2012-02-06 17:48:52

标签: c extern

我已经搜索了一些东西,但我仍然不明白..

file1.h

extern int *game_array[5];

Player.c

 #include "file1.h"

   void *delete_player(player_struct *player)
   {
     ... //some code

     game_array[5] = 5;  //undefined reference to `game_array`

     ... //some code
   }

当我不使用extern时,“工作正常”=我可以用错误构建它,但程序没有完成.. 我想使用extern是好的,但有些事情是错误的.. 我想在我的所有.c源文件中使用这个game_array ...服务器上的游戏数组,我的应用程序中只有一个这个数组的实例。

3 个答案:

答案 0 :(得分:3)

您需要在其中一个game_array文件中定义 .c,并将该文件编译/链接到您的可执行文件中。

定义如下:

int *game_array[5];

你的file1.h所说的基本上是“我的项目中某处存在一个名为game_array的变量,它具有类似”的类型。但是,在您将变量定义到某个地方(通常在.c文件中)之前,该变量实际上并不存在。

答案 1 :(得分:1)

extern关键字基本上意味着编译器不应该抱怨该符号,即使它没有被定义,因为它将在链接时可用。

因此,如果没有在链接时定义,你显然会有错误。

您需要在C文件中提供一个实现:

类似的东西:

#include "file1.h"

int * game_array[ 5 ];

void * delete_player( player_struct * player)
{
    ...

答案 2 :(得分:1)

extern int *game_array[5];意味着在某个文件中某处有game-array的实际定义 - 即没有extern.的声明你没有提供,{链接器抱怨实际变量在任何地方都不存在。