#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_的值到底是什么并无所谓(实际被定义为空),我们关心的只是是否定义过。