【问题标题】:how can I use a pointer to global struct in ansi-c?如何在 ansi-c 中使用指向全局结构的指针?
【发布时间】:2012-08-14 17:02:33
【问题描述】:

情况就是这样。在文件“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;
}

我需要从其他例程中填充结构元素,例如“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);
}

但我得到了错误:

"[Error] fileB.c E208: 语法错误 - 标记 ";" 插入到 "Data" 之前

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

所以我的问题是如何完成这个功能?我的意思是,如何从与我声明结构的文件不同的另一个文件中的另一个函数填充结构的元素?

【问题讨论】:

    标签: c struct


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      详细说明@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。

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2021-07-14
        • 2017-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多