怎么用宏来实现?

foxdeng 2005-11-02 09:42:45
求两个输入的最小值,各位看看怎么用宏实现,并不是很容易哦!
...全文
196 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
FromZteToHw 2005-11-02
  • 打赏
  • 举报
回复
支持,应该尽量用内联的模版函数。
trackant 2005-11-02
  • 打赏
  • 举报
回复
就是,大家颇为喜欢的表达式副作用在宏上就是个噩梦
dx30611 2005-11-02
  • 打赏
  • 举报
回复
是啊,我看《c++程序设计语言》都说应尽量避免使用宏,因为宏不进行类型检查,只是做简单的替换。
逸学堂 2005-11-02
  • 打赏
  • 举报
回复
应用上面的宏
int i(4),j(3);
int m = MIN(i,--j);
测试一下m的值是多少
m的值1;,而大家想得到是2,这就是因为宏只是在调用出
默认展开,
int m = ((i)>(--j)?(i):(--j));
因为j使用两次,所以返回值m=1,j的值也变成了1;
所以建议大家能避免用宏,就避免吧,因为宏不提供安全检查机制,只是
默认展开。
解决这种问题我们写模板函数求最小值就可以
最大值模板函数
template<class T>
inline const T& uMaximum(const T& tFirst, const T& tSecond)
{ return tFirst > tSecond ? tFirst : tSecond; }
最小值模板函数
template<class T>
inline const T& uMinimum(const T& tFirst, const T& tSecond)
{ return tFirst < tSecond ? tFirst : tSecond; }
调用模板函数就不会引发上面的问题。
wuwen19 2005-11-02
  • 打赏
  • 举报
回复
晕,慢了两步。
wuwen19 2005-11-02
  • 打赏
  • 举报
回复
#define IS_LOWER((A),(B)) (A)>(B) ? (B) : (A)
runall 2005-11-02
  • 打赏
  • 举报
回复
#define MIN(x,y) ((x)>(y)?(y):(x))
runall 2005-11-02
  • 打赏
  • 举报
回复
#define MIN(x,y) ((x)>(y)?(x):(y))
tiansf85 2005-11-02
  • 打赏
  • 举报
回复
在编程时很难考虑到细节的东西,所以应尽可能的避免错误隐患,我觉得还是ugg(小问题大道路)说得比较好.
foxdeng 2005-11-02
  • 打赏
  • 举报
回复
的确,使用宏的方法来实现这个目标会带来副作用,原因ugg(小问题大道路)已经分析的很透彻了。有人说,尽量不要使用宏,我个人认为这种想法不可取。我们不能因为鱼刺而拒绝吃鱼,想象一下,我用几行简单的代码就可以实现的东西,又何必要洋洋洒洒的写出几十行代码来呢?(赚稿费吗?)
只要我们牢记,MIN会带来一个无法避免的副作用,提醒小心使用就行了
我是如下做的:
#define MIN(x,y) ((x)>(y)?(y):(x))
// 注意:形如 MIN(i,j++) MIN(i++,j++) MIN(i++,j)会带来问题,确保不要这样使用!!!!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧