#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
int main (int argc, char **argv){ char *p = "abcdefgh"; printf("%c ",min(*p++,'c')); //宏被扩展为 ( *p++ <= c ? *p++:c ) return 0;}
输出
b
我们可以看到,宏只是简单的替换,这个例子如何避免副作用呢?可以使用if-else 语句改写。