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

时间:2012-08-14 17:02:34

标签: 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;
}

我需要填充其他例程中的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;”

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

在@ 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"

允许您使用变量Data。