本帖最后由 深夜星空 于 2014-6-19 10:12 编辑
各位大神:
用STM32,模块太多,分了几个文件,结果发现管理起来真是挺难啊。原谅我C语言没学好 - -。新问题:
void send(Mechine* M)
{
if(M==&M1)
MechineNum=1;
if(*M==M2)
MechineNum=2;
}
这两种引用,第二种红色的报错,为什么?
现在问题是:
在 a.h 中定义了一个结构体,声明两个变量,方便引用。
typedef struct
{
u16 Temperature;
u16 Humidity;
}Mechine;
extern Mechine M1,M2;
在 a.c 中定义两个变量:
Mechine M1,M2;
现在 b.h 中声明一个函数,用刚才定义的结构体类型的变量作为参数
void send( Mechine* M )
在 b.c 中的实现函数
#include "a.h"
#include "b.h"
void send( Mechine* M )
{}
结果,报错说 b.h 函数的参数 结构体找不到。红色标出。不明原因,请大神帮帮忙看一下。先谢
111问题解决了,我把这个 函数 void send( Mechine* M ) 拿出来 单做了一个.c 一个.h文件,再去 #include "a.h" 又好了。
我一直觉得是编译器编译顺序问题,如果先#include "a.h" (有结构体声明的文件) 再去#include "b.h" (有函数参数的文件)就应该不会出错,
我开始包含的顺序是按照这么做的,可还是报错。我用的IAR 6.5。不知道是不是这问题?
又在新的文件里试了一下,应该就是顺序的问题,顺序对,编译就不会出错。不知道刚才那个文件为什么不行。
|