宏的副作用

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

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

输出

b

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

原文地址:https://www.cnblogs.com/zhanbiqiang/p/4109378.html