MDK头文件定义数据类型不能被另一头文件识别的问题
比如我在头文件A.h写typedefunsignedcharu8;在一个C文件中同时包含A.h和B.h,我在C文件中定义u8i;在B.h中写externu8i;编译出错,...
比如我在头文件A.h写typedef unsigned char u8;在一个C文件中同时包含A.h和B.h,我在C文件中定义u8 i;在B.h中写extern u8 i;编译出错,在B.h说没有定义u8 这是为什么呢?应该怎么解决呢?运行环境是MDK
展开
展开全部
C是顺序执行程序,你c文件中头文件写在上面,u8 i;在下面,对于B.h来说,当然找不到u8 i,因为他只会往上找。这种情况应该是一个习惯问题。
头文件中最好不要定义变量,引用外部变量也不要,头文件中最好只有宏定义和函数声明。变量和函数体都放在C文件中。
你这里的解决办法是再建立一个B.c的文件,然后包含A.h和B.h。你的extern就可以找到了。
头文件中最好不要定义变量,引用外部变量也不要,头文件中最好只有宏定义和函数声明。变量和函数体都放在C文件中。
你这里的解决办法是再建立一个B.c的文件,然后包含A.h和B.h。你的extern就可以找到了。
更多追问追答
追问
谢谢你的回答,我已经建立了两个C文件,在A.h中定义typedef struct { u8 hour; u8 min;u8 sec; }RTC_TimeData;这么结构体B.c文件对这个结构体进行处理 这个结构体作为函数的输入参数void RTC_display(RTC_TimeData *TimeTemp);在B.h中对函数声明时编译不通过RTC_TimeData没有定义
追答
在B.h前面声明#include“A.h”或者在B.c中先#include“A.h”再#include"B.h"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你这样定义你的A.h
#ifndef _A_H_
#define _A_H_
typedef unsigned char u8;
#endif
然后你在你的b.h也#include "A.h"不就可以了嘛!
#ifndef _A_H_
#define _A_H_
typedef unsigned char u8;
#endif
然后你在你的b.h也#include "A.h"不就可以了嘛!
追问
真的行了,能说一下原理吗?这不是条件编译么?为什么这就行了,请你给我说说呗 谢谢!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询