判断宏被定义为数字还是空的方法

今天在阅读Apache Portatble Runtime的源代码,忽然发现一段简短的宏定义,才让我对这个问题产生了思考:如何判断一个宏被定义为了空,还是被定义成一个数字?

APR的判定代码如下:

#if defined(APR_POOL_DEBUG) #if (APR_POOL_DEBUG - APR_POOL_DEBUG -1 == 1) #undef APR_POOL_DEBUG #define APR_POOL_DEBUG 1 #endif #else #define APR_POOL_DEBUG 0 #endif
注意上面代码中的第二句,当定义APR_POOL_DEBUG为空时,该语句等价于 - -1 == 1,当定义APR_POOL_DEBUG为任何数字时,该判断语句左边等于-1,不满足条件。很smart的一种做法,阅读开源代码始终是程序员进阶的最佳途径之一,学习前人经验的同时,还可以拓展自己的思维。

你可能感兴趣的:(apache)