软件注册站
热情软件屋

 
#define后有定义项却无被定义项,为什么
编号: QA003234    
建立日期: 2000年8月1日 最后修改日期: 2000年8月1日
所属类别: C/C++ - 新手问题
   
    操作系统: win98 VC++6.0
    编程工具: VC++6.0
    问题: 专家你好!
    我是一名“早期的”编程爱好者,较熟悉TC。但最近转向Windows编程时,经常发生一些令我费解的问题,如下例:
    C++头文件的预编译经常出现#define后有定义项却无被定义项的情况,如:
    在#if !defined(AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_)
    #define AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_中,AFX_MAINFRM_H__BE42E62A_5388_11D4_A37F_9B105B2CF13D__INCLUDED_被定义成了什么,这句话是什么意思,我不明白,请指教。
    水平: 刚入门(Kittle)
   
    象这种情况是为了避免头文件被多次包含。假设有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

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio