shangzhenwei 发表于 2009-3-13 23:57:33

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

在书中第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"
这就出现了矛盾。
不知道我理解的是否正确?而这又应该怎么解决?

Gorgon_Meducer 发表于 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 = {0};

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

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

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

shangzhenwei 发表于 2009-3-15 01:42:41

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

fangmcu 发表于 2009-3-15 08:24:27

<<深入浅出AVR单片机>>,真是很好,我看这本书,好象看小说,没有技术书的枯燥乏味!

shangzhenwei 发表于 2009-3-18 19:28:18

是啊,书真的不错。希望我能好好学习。
页: [1]
查看完整版本: 请教傻孩子:《深入浅出AVR单片机》中,关于“配置头文件”的问题