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

m4l*_*90n 4 c struct

情况就是这样.在文件"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;
}
Run Code Online (Sandbox Code Playgroud)

我需要从其他例程中填充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);
}
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误:

"[错误] fileB.c E208:语法错误 - 在"数据"之前插入标记";"

当我交叉探测错误时,编译器将我带到声明"extern MY_STRUCT Data;"

所以我的问题是如何实现这一功能?我的意思是,如何在另一个文件中填充结构元素,这个文件不同于我声明结构的文件?

pb2*_*b2q 5

当编译器正在编译fileB.c时,它不知道typedef你在fileA.c中定义的那个.所以在fileB.c中,MY_STRUCT是一个未知类型.

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