[编译预处理系列3]

博客围绕Windows系统下的VC++编程展开,涉及编程相关内容及工具使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值