首页 > 代码库 > 宏的副作用

宏的副作用

 

#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 语句改写。

宏的副作用