c语言解除宏定义_3.3.5 取消宏定义和重新定义宏

3.3.5   取消宏定义和重新定义宏

#undef命令可以取消定义一个名称为宏:#undef name

这个命令使预处理器忘记name的所有宏定义。取消一个当前未定义宏的定义并不是错误。当一个名称被取消定义之后,就可以向它提供一个全新的定义(使用#define),而不会产生任何错误。在#undef命令内部,并不会执行宏替换。

标准C以及其他许多编译器允许对宏进行温和的重定义。也就是说,新定义与原来的定义必须逐标记相同。新定义所包含的空白字符的位置必须与原定义相同,尽管具体的空白字符可以不同。我们认为程序员不应该依赖这种温和的重定义。更好的风格是让所有的程序入口都使用同一个单独的定义点,包括宏(有些旧式的C编译器可能不允许任何类型的重定义)。

例子

在下面的定义中,NULL的重定义是允许的,但对FUNC的所有重定义都是非法的(第1个重定义包含了原定义中未曾出现的空格,第2个重定义修改了两个标记)。

例子

当程序员由于法律的原因无法知道是否存在以前的定义时,可以使用#ifndef命令测试是否存在一个现有的定义,以避免对它进行重定义:

在那些允许命令中的宏定义调用C编译器的实现中,这种用法特别有用。例如,下面这个UNIX对C的调用提供了5000作为MAXTABLESIZE宏的初始定义。随后,C程序员应该像前面一样检查这个定义:

尽管标准C并不允许,但一些旧式的预处理器实现在处理#define和#undef时就像维护一个定义堆栈一样。当一个名称用#define进行重新定义时,它的旧定义被压入到堆栈中,然后用新定义替换这个旧定义。当一个名称用#undef取消定义时,当前的定义就被丢弃,最近的一个定义(如果有)就被恢复。

参考:#define命令 第3.3节;#ifdef和ifndef命令 第3.5.3节。

【责任编辑:云霞 TEL:(010)68476606】

点赞 0

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值