#define和#undef

转自:http://blog.163.com/cht_sky/blog/static/461424862007915103626769/

2.5.3   声明指令声明指令用于定义或取消定义条件编译符号。     
    
  pp-declaration:(pp   声明:)     
  whitespaceopt       #       whitespaceopt       define       whitespace       conditional-symbol       pp-new-line(空白可选       #       空白可选       define       空白       条件符号       pp   新行)   
  whitespaceopt       #       whitespaceopt       undef       whitespace       conditional-symbol       pp-new-line(空白可选       #       空白可选       undef       空白       条件符号       pp   新行)     
  pp-new-line:(pp   新行:)     
  whitespaceopt       single-line-commentopt       new-line(空白可选       单行注释可选       新行)     
  对   #define   指令的处理使给定的条件编译符号成为已定义的(从跟在指令后面的源 取消 定义一个本来已经是未定义的条件编译符号。下面的示例定义一个条件编译符号   A,然后两次取消定义该符号;第二个   #undef   没有作用但仍是有效的。   
    
  #define   A   
  #undef   A   
  #undef   A   

 

 

如果你想定义这个宏那就#define   X 
如果你不想让你已经#define   X的宏在其他其他地方由于引入了这个包含宏的.h文件而引起一些编译问题,那你就#undef   X掉,就这么简单。 
举个简单的例子。 
有1.c,11.h,12.h三个文件 
其中在11.h中定义了#define   X   extern 
x   int   a; 
而在12.h中你又定义了#define   X   int 
x   b; 
而在1.c中同时包含了这2个头文件,那就会引起一些问题,此时你必须把其中一个或者这两个都#undef掉来确保宏的正常。

 

#undef只是撤消掉掉原来定义的宏, 
但是不会取消掉你已经用这个宏定义的变量 
#define   X   extern 
x   int   a; 
#undef   X 

你仍然可以使用这个a,但不能用X了,当然你再定义X成什么就随便了 
你也可以再定义成 
#define   X   extern 
x   int   a; 
#undef   X 
#define   X   int 
X   b; 
#undef   X 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值