#define min(X,Y) \
(__extension__ \
({ \
typeof(X) __x=(X), __y=(Y); \
(__x<__y)?__x:__y; \
}) \
)
int x = 1, y = 2;;
int main()
{
printf("min=%d\n", x++ < y++ ? x++ : y++);
printf("x = %d, y = %d\n", x, y);
}
int x = 1, y = 2;;
int main()
{
printf("min=%d\n",
({
typeof(x) __x = (x++), __y = (y++); /* 定义了两个整形变量 */
(__x<__y)?__x:__y;
})
);
printf("x = %d, y = %d\n", x, y);
}
原帖由 missjiang 于 2007-5-12 01:15 发表
像这样的写法:func(i++, i++)带来的问题,可以被看作是由i++、++i的副作用引起的。
使用传统的min导致上述程序出现问题的原因在于:x++被错误的执行了两次,这应该归结于宏的副作用,而与i++、++i的副作用 ...
原帖由 missjiang 于 2007-5-12 15:57 发表
template <class type>
type min(type a, type b)
{
return a < b ? a : b;
}
原帖由 飞灰橙 于 2007-5-13 21:03 发表
倒,是pp mm的发帖啊,早知道就不拍砖了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |