C 多文件结构体变量如何声明

时间:2021-09-09 10:18:25
我在a.h中定义结构体
#ifdef __A_C_
#define _A_EXTERN
#else
#define _A_EXTERN extern
#endif

struct Ev1527_Type
{
unsigned char Pass_Word[3];
};
_A_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
在a.c和b.c中分别调用Pass_Word_Ev1527的时候都会报错,MISSING ';' BEFORE 'PASS_WORD_EV1527'
这是为何?

8 个解决方案

#1


贴上完整的代码看看。

#2


main.h中
#ifndef __MAIN_H_
#define  __MAIN_H_

#ifdef __MAIN_C_
#define _MAIN_EXTERN
#else
#define _MAIN_EXTERN extern
#endif

typedef struct Ev1527_Type
{
unsigned char Pass_Word[3];
};
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

#endif

main.c中
#define __MAIN_C_
#include "STC12C5A.H"
#include "main.h"
void main()
{
Pass_Word_Area_Ev1527[1].Pass_Word[0] = 0;
P0 = Pass_Word_Area_Ev1527[1].Pass_Word[0];
Pass_Word_Area_Ev1527[2].Pass_Word[0] = 2;
P0 = Pass_Word_Area_Ev1527[2].Pass_Word[0];
}
小弟现在真的有点找不到头绪了,希望各位大侠给看看。

#3


对了,报错是指向main.h中定义的地方。

#4


_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN  struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

#5


引用 4 楼 mymtom 的回复:
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];


谢谢!
加struct之后管用了,

#6


引用 5 楼 he2002512 的回复:
引用 4 楼 mymtom 的回复:_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

谢谢!
加struct之后管用了,

不过现在还是会报错
main.c(6): error C202: 'Pass_Word_Area_Ev1527': undefined identifier

#7


引用 4 楼 mymtom 的回复:
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];


好了,现在可以了,是我太粗心,测试的时候名字写错了!
谢谢,非常感谢!

#8


引用 4 楼 mymtom 的回复:
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

#1


贴上完整的代码看看。

#2


main.h中
#ifndef __MAIN_H_
#define  __MAIN_H_

#ifdef __MAIN_C_
#define _MAIN_EXTERN
#else
#define _MAIN_EXTERN extern
#endif

typedef struct Ev1527_Type
{
unsigned char Pass_Word[3];
};
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

#endif

main.c中
#define __MAIN_C_
#include "STC12C5A.H"
#include "main.h"
void main()
{
Pass_Word_Area_Ev1527[1].Pass_Word[0] = 0;
P0 = Pass_Word_Area_Ev1527[1].Pass_Word[0];
Pass_Word_Area_Ev1527[2].Pass_Word[0] = 2;
P0 = Pass_Word_Area_Ev1527[2].Pass_Word[0];
}
小弟现在真的有点找不到头绪了,希望各位大侠给看看。

#3


对了,报错是指向main.h中定义的地方。

#4


_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN  struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

#5


引用 4 楼 mymtom 的回复:
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];


谢谢!
加struct之后管用了,

#6


引用 5 楼 he2002512 的回复:
引用 4 楼 mymtom 的回复:_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];

谢谢!
加struct之后管用了,

不过现在还是会报错
main.c(6): error C202: 'Pass_Word_Area_Ev1527': undefined identifier

#7


引用 4 楼 mymtom 的回复:
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];


好了,现在可以了,是我太粗心,测试的时候名字写错了!
谢谢,非常感谢!

#8


引用 4 楼 mymtom 的回复:
_MAIN_EXTERN Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];
改为
_MAIN_EXTERN struct Ev1527_Type Pass_Word_Ev1527[LEAN_NUMBER];