如何在ansi-c中使用指向全局结构的指针?

如何在ansi-c中使用指向全局结构的指针?,c,struct,C,Struct,情况就是这样。在文件“fileA.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); } 但我得到了一个错误:

情况就是这样。在文件“fileA.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中,
 我的结构是未知类型


您应该将
typedef
移动到一个公共标题,并将其包含在fileA.c和fileB.c中。

详细说明@pb2q答案:

创建一个filea.h文件,其中包含(忽略定义和内容):

这将声明结构并告诉任何想知道变量在另一个文件中声明的人

#include "filea.h"     // near the top
(...)
MY_STRUCT Data;    // Somewhere meaningful
这实际上会声明变量数据

这允许您使用变量数据

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

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