搜索
bottom↓
回复: 4

请教傻孩子:《深入浅出AVR单片机》中,关于“配置头文件”的问题

[复制链接]

出0入0汤圆

发表于 2009-3-13 23:57:33 | 显示全部楼层 |阅读模式
在书中第465页,在最下方的fileConfig.h文件中,如果把  
#include "FileA.h"
#include "FileB.h"
交换位置,变为
#include "FileB.h"
#include "FileA.h"
则编译时会出线错误。那么第465页中间的假设,如果“FileA.h需要FileB.h的某种支持(途中没有明确展示出来)”,那么包含的顺序应该是:
#include "FileB.h"
#include "FileA.h"
这就出现了矛盾。
不知道我理解的是否正确?而这又应该怎么解决?

出0入296汤圆

发表于 2009-3-14 00:20:03 | 显示全部楼层
这并不矛盾,你注意 FileA.h需要FileB.h的某种支持,并不意味着FileB.h一定要放在FileA.h的前面,
例如FileA.h中定义了某个宏,这个宏中用到的信息在FileB.h中定义,但是这些宏肯定是在.c中使用
的,因此对于这种情况FileA.h和FileB.h的前后关系是不重要的。但是,如果明确FileB.h要检测FileA.h
中定义的某个宏的存在性,那么就需要考虑前后的问题了:
举一个例子:FileB.h中定义了一个结构体类型

typdef struct
{
   ....
}EXAMPLE;

在FileA.h中某个宏用到了结构体类型,例如

#define DIM_EXAMPLE(__NAME,__VALUE)         EXAMPLE __NAME[__VALUE] = {0};

那么显然,当File_Config.h包含了FileA.h和FileB.h以后,无论先后顺序,包含了File_Config.h的
.c文件中都可以正常的使用宏DIM_EXAMPLE()

^_^ 您很认真地思考这个问题了,非常高兴您能提出您的疑问

《深入浅出AVR单片机》只是提出了循环包含的问题,并介绍了两种极端的包含原则,以及一种变通的
包含原则。然而更常见,更贴近应用实际的包含原则,我在《深入浅出AVR单片机》精要 这本书的第十四
章中详细的加以阐述了,您可以在本论坛下载此书的PDF版本^_^

出0入0汤圆

 楼主| 发表于 2009-3-15 01:42:41 | 显示全部楼层
我明白了,除非头文件之间有检测相互之间信息的存在性(或者隐含有检测相互之间信息的存在性),头文件中的信息是没有前后关系的。原来很简单的一个问题,我搞的这么复杂......
我已经把《深入浅出AVR单片机》精要 下载下来了,我会好好研究的,谢谢傻孩子!!!!
再次祝贺《深入浅出AVR单片机——从ATmega48/88/168开始》成为ATMEL官方推荐入门用书(要不是你说,我还不知道呢!^_^惭愧惭愧),看来我手中的这本书升值很快啊!

出0入8汤圆

发表于 2009-3-15 08:24:27 | 显示全部楼层
<<深入浅出AVR单片机>>,真是很好,我看这本书,好象看小说,没有技术书的枯燥乏味!

出0入0汤圆

 楼主| 发表于 2009-3-18 19:28:18 | 显示全部楼层
是啊,书真的不错。希望我能好好学习。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 15:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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