问题:写一个”标准"宏MIN ,这个宏输入两个参数并返回较小的一个。

#define Min(a,b) ( ((a)>=(b)) ? (b) : (a) )  
一定要注意加括号如果不加括号,因为define定义表达式时要注意“边缘效应”,例如如下定义:
#define N 2+3  //我们预想的N值是5,我们这样使用N
int a = N / 2;  //我们预想的a的值是2,可实际上a的值是3

原因在于在预处理阶段,编译器将a = N/2处理成了a = 2+3/2;这就是宏定义的字符串替换的"边缘效应",因此要如下定义:

#define N (2+3)

你可能感兴趣的:(问题:写一个”标准"宏MIN ,这个宏输入两个参数并返回较小的一个。)