簡體   English   中英

像這樣在C中使用extern有什么問題?

[英]What is wrong with using extern in C like that?

我已經在此搜索過一些內容,但我仍然不明白。

文件1.h

extern int *game_array[5];

播放器

 #include "file1.h"

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

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

     ... //some code
   }

當我不使用extern時,它“工作正常” =我可以在沒有錯誤的情況下構建它,但是程序尚未完成..我認為使用extern很好,但是出了點問題..我想使用這個game_array ... array服務器上所有我的.c源文件中的游戲,我的應用程序中只有該數組的一個實例。

您需要在其中一個.c文件中定義 game_array ,並將該文件編譯/鏈接到可執行文件中。

定義將如下所示:

int *game_array[5];

您的file1.h所說的基本上是“我的項目中某處存在一個名為game_array的變量,並且具有game_array類型” 但是,該變量實際上並不存在,直到您在某處(通常在.c文件中)定義了它。

extern關鍵字基本上意味着,即使未定義符號,編譯器也不應抱怨該符號,因為它將在鏈接時可用。

因此,如果未在鏈接時定義它,則顯然會出現錯誤。

您需要在一個C文件中提供一個實現:

就像是:

#include "file1.h"

int * game_array[ 5 ];

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

編寫extern int *game_array[5]; 意味着在某個文件中的某個地方,有一個game-array的實際定義-即,沒有extern.的聲明extern. 您沒有提供這些信息,因此鏈接器抱怨實際變量在任何地方都不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM