Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2347079
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2009-03-13 22:49:51

一直模糊地以为, 这是预处理器中的重复.

#if MACRO_NAME
是把MACRO_NAME 替换, 判断替换后的内容是否为true, 如

#define MACRO_NAME  1

   #if MACRO_NAME
   #   error  "MACRO_NAME Defined"
   #endif

会输出内容, 但如果上面定义为0 则不会.

正因为
#if MACRO_NAME 是执行一次宏替换, 所以如果定义为函数式的宏

#define MACRO_NAME(a)  Do nothing

   #if MACRO_NAME
   #   error "MACRO_NAME Defined"
   #endif

是不会输出任何内容的, 因为MACRO_NAME是函数式的宏, 不符合可以被替换的规则.

另外
#if 后面可以接受很多的简单的数学运算, 位运算. 也有优先级结合性, 完全自成一家, 在这不展开这个


#if defined(MACRO_NAME)
是真正判断一个宏是否被定义了, 不管它的值是1还是0, 也不管它是否是函数式的宏.
阅读(771) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~