今天在阅读Apache Portatble Runtime的源代码,忽然发现一段简短的宏定义,才让我对这个问题产生了思考:如何判断一个宏被定义为了空,还是被定义成一个数字?
APR的判定代码如下:
注意上面代码中的第二句,当定义APR_POOL_DEBUG为空时,该语句等价于 - -1 == 1,当定义APR_POOL_DEBUG为任何数字时,该判断语句左边等于-1,不满足条件。很smart的一种做法,阅读开源代码始终是程序员进阶的最佳途径之一,学习前人经验的同时,还可以拓展自己的思维。