[英]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.