宏的副作用

 

#include <stdio.h>
#define min(a,b) ((a)<=(b)?(a):(b))

int main (int argc, char **argv)
{
    char *p = "abcdefgh";
    printf("%c\n",min(*p++,'c'));  //宏被扩展为 ( *p++ <= c ? *p++:c )
    return 0;
}

 

输出

b

我们可以看到,宏只是简单的替换,这个例子如何避免副作用呢?可以使用if-else 语句改写。

posted @ 2014-11-19 22:31  zhanbiqiang  阅读(281)  评论(0编辑  收藏  举报