簡體   English   中英

如何在ansi-c中使用指向全局結構的指針?

[英]how can I use a pointer to global struct in ansi-c?

就是這種情況。 在文件“ fileA.c”中,我有

typedef struct MY_STRUCT
{
  int A;
  int B;
  int C;
}MY_STRUCT;

MY_STRUCT Data;

/* Function */
int function(MY_STRUCT *params)
{
  int varA, varB, varC;

  varA = params->A;
  varB = params->B;
  varC = params->C;
}

而且我需要從其他例程中填充struct元素,例如“ fileB.c”,其中包含以下內容:

extern MY_STRUCT Data;

int function(MY_STRUCT *params);

/* Function  */
void userMain(void)
{
  Data.A = 1254;
  Data.B = 5426;
  Data.C = 1236;

  function(&Data);
}

但是我得到了錯誤:

“ [錯誤] fileB.c E208:語法錯誤-標記“;”在“數據”之前插入

當我交叉探查錯誤時,編譯器會將我帶到聲明“ extern MY_STRUCT Data;”。

所以我的問題是如何完成此功能? 我的意思是,我如何在另一個文件中填充另一個函數中的結構元素,該文件與聲明該結構的文件不同?

當編譯器編譯fileB.c時 ,它不知道您在fileA.c中定義的typedef 因此在fileB.c中, MY_STRUCT是未知類型。

您應該將typedef移到公共標頭,並將其包含在fileA.c和fileB.c中。

在@ pb2q答案上詳細說明:

創建一個filea.h文件(省略定義和填充):

struct MY_STRUCT
{
(blah blah blah ...)
};

extern MY_STRUCT Data;

這將聲明該結構,並告訴任何想知道該變量在另一個文件中聲明的人。 然后將filea.c放入以下行

#include "filea.h"     // near the top
(...)
MY_STRUCT Data;    // Somewhere meaningful

這實際上將聲明變量Data。 最后,在文件“ fileb.c”中輸入

#include "filea.h"

允許您使用變量數據。

暫無
暫無

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

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