野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26837|回复: 3

请教一个头文件和宏定义的问题

[复制链接]
发表于 2014-3-18 10:30:21 | 显示全部楼层 |阅读模式
宏定义多了,我想用一个头文件来存放这些宏定义,然后各.c文件里插入这个头文件。

例如,在AAA.c里我要用一个宏定义#define xxx 0,直接在开头加上该定义就行。或者我在AAA.h头文件里宏定义,然后在AAA.c文件里引用头文件就行。
如果,我在BBB.h头文件里定义了该宏,在AAA.c里,如果我先引用BBB.h再引用AAA.h是可以使用该宏的,如果反过来,在AAA.c里先引用AAA.h再引用BBB.h编译时提示该宏没有定义。

这个现象是否与文件编译的顺序有关?这个如何克服?

我现在的想法是:我写一个Driver.h头文件,里面放一些宏,还有一些公共变量、公共函数。然后在stm32f10x.h文件的末尾 #include "Driver.h"。
这样,我其他模块的头文件里肯定会有#include "stm32f10x.h",这样就把Driver.h也包含进去了。

但是现状就是Driver.h里的宏编译不能通过,但是Driver.h里申明的变量和函数都可以通过编译被其他文件里调用呢~

不解~  有个办法,就是在AAA.c文件的最开始的地方引用Driver.h头文件。但是我觉得有点麻烦,有点不爽~
回复

使用道具 举报

发表于 2014-3-18 10:35:18 | 显示全部楼层
因为你的aaa.h文件里使用了bbb.h文件的一些定义或者声明,所以必须先包含bbb.h
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-18 10:37:58 | 显示全部楼层
郑倚云 发表于 2014-3-18 10:35
因为你的aaa.h文件里使用了bbb.h文件的一些定义或者声明,所以必须先包含bbb.h

没有啊~   我的AAA.h是把AAA.c里的一些变量和函数作了一下申明,没涉及到Driver.h里的宏定义。
这个问题我想过,觉得不是这个问题。
所以不解~
回复 支持 反对

使用道具 举报

发表于 2014-3-18 10:43:38 | 显示全部楼层
LZ直接载几张图看看吧,你的描述实在是太混乱了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 20:43 , Processed in 0.027330 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表