该宏#define min(x,y) ((x) < (y) ? (x) : (y))会产生什么副作用?

这在标准c中,我们常用来求最小值,它有如下副作用,举例:

 代码min(ia++,ib++)  用宏替代    ((ia++) < (ib++) ? (ia++) : (ib++)) ,ia,ib变量加了两次,这不是我们想要的结果,我们可以用函数的方式能够避免。

在linux系统中使用的是GNU c,是标准c的扩展,可以用宏就实现,

#define min_t(type,x,y) \
({ type _ _x = (x); type _ _y = (y); _ _x < _ _y ? _ _x: _ _y; })

你可能感兴趣的:(面试题)