c语言中,为什么宏定义写#define MIN(a,b) a
发布网友
发布时间:2022-05-02 15:07
我来回答
共3个回答
热心网友
时间:2022-06-20 13:58
这就涉及到函数与宏的优缺点了
宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已,既然是单纯的替换,如果你括号去掉由于优先级的关系,就有可能出现问题。
之所以用宏是因为 宏的效率高,不需要压栈 和出栈
热心网友
时间:2022-06-20 13:59
在这个宏定义中有括号和没括号没什么区别,但不能保证在其他宏定义中两者无区别,
例如,#define MUL(a,b) ((a) * (b))与 #define MUL(a,b) (a * b)
令a = 3 + 1, b=2, 则前者=(3+1)*2=8 ,后者=(3+1*2)= 5
所以为了保证宏定义结果的安全性,一般每个变量都要加上括号
热心网友
时间:2022-06-20 13:59
因为一旦a或b代入的表达式中 有比< 运算优先级更小的运算符 运算的优先级会被改变 得到的可能不是原来想要的结果