社区
C语言
帖子详情
怎么用宏来实现?
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)会带来问题,确保不要这样使用!!!!
macro dev rstest-基于Rust夹具的测试框架。 它使用过程宏来
实现
夹具和基于表的测试。-Rust开发
Rust的基于夹具的测试框架简介rstest使用过程宏来帮助您编写夹具和基于表的测试。 要使用它,请为Rust引入基于Fixture的测试框架简介rstest使用过程宏来帮助您编写Fixture和基于表的测试。 要使用它,请将以下几行添加到您的Cargo.toml文件中:[dev-dependencies] rstest =“ 0.6.4” Fixture核心思想是您可以通过将它们作为测试参数传递来注入测试依赖项。 在下面的示例中,定义了一个固定装置,然后将其用于两个测试中,只需将其作为参数即可使用:use rstest :: *; #[fixture] pub fn Fixture()->
c_exceptional:一个简单的C99异常处理库,它使用了一些漂亮的宏来
实现
真正的try {...} catch(err){...}最终{...}语法!
极好的 一个简单的C99及更高版本的异常处理库,它使用了一些漂亮的宏来
实现
真正的try{...}catch(err){...}finally{...}语法! 首先,在您的代码中包含exceptional/exceptional.h 。 然后,使用try { ... }宏(与catch { ... }和/或可能finally { ... }与catch { ... }结合使用)来防止错误。 使用Wonderful Black Ma(cro)gic
实现
。 它以这种复杂的样式编写,以确保您可以使用以下语法: try { // some code here if (something_is_wrong) throw (error_code); // some code that would only be executed if not thrown } catch(e
用vba
实现
自定义序列排序
用vba编写宏来
实现
自定义序列排序,多级排序
为outlook添加主题提醒
可以
用宏来
实现
,将下面的代码插入到ThisOutlookSession模块: Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) If Item.subject = "" Then Cancel = True MsgBox "发送前必须填写主题!" End If End Sub 要创建宏: 按ALT-F11进入VBA集成开发环境 在左上角的工程资源管理器中依次展开Project1/Microsoft Office Outlook 对象/ThisOutlookSession 右击ThisOutlookSession→查看代码 复制上面的代码并粘贴进代码窗口 关闭VBA编辑器
CAD二次开发+VBA宏
实现
给图纸中所有的圆进行编号并
实现
蛇形排序
内容概要:CAD2021中利用VBA宏
实现
给图纸中所有的圆进行编号并
实现
蛇形排序。 适用人群:使用VBA宏来进行CAD二次开发人员,供参考,内附源代码。
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章