 |
象这种情况是为了避免头文件被多次包含。假设有a.h,b.h包含了a.h,,而c.h又包含了a.h和b.h,这样在编译c.h时会出错,因为a.h中的定义被声明了两次。为了解决这个问题,就采用了这样的机制,把a.h写成:
#if !defined(AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_)
// 如果没有包含过mainfrm.h,就定义以下内容
#define AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_
.....
#endif
这里的符号AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_只是为了表示是否包含了mainfrm.h,如果使用#define定义了,则defined(AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_)返回真。至于符号AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_的值到底是什么并无所谓(实际被定义为空),我们关心的只是是否定义过。
相关问题:
QA004890 "每个.h文件的开始避免重复编译十六进制码是根据什么来写的"
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 新手问题, newbie, faq。
|