社区
C++ 语言
帖子详情
#define MIN(A,B) ((A) <= (B) ? (A) : (B))问题
chdjob
2008-02-22 10:29:37
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果:
网上看到的答案有点奇怪,
((*p++) <= (b) ? (*p++) : (*p++))
这个表达式会产生副作用,指针p会作三次++自增操作。
我怎么看都是p作两次++自增操作阿,请高手给出正确答案
...全文
1066
17
打赏
收藏
#define MIN(A,B) ((A) <= (B) ? (A) : (B))问题
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果: 网上看到的答案有点奇怪, ((*p++) <= (b) ? (*p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次++自增操作。 我怎么看都是p作两次++自增操作阿,请高手给出正确答案
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SophiaNM
2011-03-10
打赏
举报
回复
这个与编译器关系太大了。优化级别设置的高的话,可能只执行一次
stonewomen
2011-03-09
打赏
举报
回复
MIN(*p++, b)的预处理结果:((*p++) <= (b) ? (*p++) : (b))。
实验结果:当*p>b时,指针p只自增一次,而*p<=b时,指针p自增两次。
网上的东西,有些还是不靠谱的,实践是检验真理的唯一标准。
顶一下
高性能架构探索
2011-03-09
打赏
举报
回复
这个话题很好玩么?
编译器都做不好的事,你在找答案
pathuang68
2011-03-09
打赏
举报
回复
看看Scott Meyer的《Effective C++》,其中有一个条目专门说了这个内容。
dwtrace1
2011-03-09
打赏
举报
回复
[Quote=引用 11 楼 maihx 的回复:]
MIN(*p++, b)的预处理结果:((*p++) <= (b) ? (*p++) : (b))。
实验结果:当*p>b时,指针p只自增一次,而*p<=b时,指针p自增两次。
网上的东西,有些还是不靠谱的,实践是检验真理的唯一标准。
[/Quote]
顶,我也试过了,就这样的结果
Rain208
2011-03-09
打赏
举报
回复
副作用。。。。。。。。。。。。。。。
辟壤-逐日
2011-03-09
打赏
举报
回复
MIN(*p++, b)的预处理结果:((*p++) <= (b) ? (*p++) : (b))。
实验结果:当*p>b时,指针p只自增一次,而*p<=b时,指针p自增两次。
网上的东西,有些还是不靠谱的,实践是检验真理的唯一标准。
碎碎念
2011-03-09
打赏
举报
回复
我觉得也是自增2次...
lz可以看看生成的汇编代码就清楚了....
kobe198702
2011-03-09
打赏
举报
回复
自加自减的 变量 不宜用 #define
phxian
2011-03-09
打赏
举报
回复
应该是自加3次,因为函数本身传递参数是也会自加一次!
菠菜Hello_World
2008-02-22
打赏
举报
回复
int a=5;
int *p=&a;
int b=6;
MIN(*p++,b);
*p最后得到1245112。*P的值可能是不可预测的。
菠菜Hello_World
2008-02-22
打赏
举报
回复
觉得这是一个关于利用宏的副作用,只是不会得到最小值。若*p比b小,*p最后要大于b的值,加几次和b的值相关吧?菜鸟初学,请高手指正。
liujinxing
2008-02-22
打赏
举报
回复
two
xuegao007
2008-02-22
打赏
举报
回复
根据?前的条件的真假,只走?后语句中的一条。
visame
2008-02-22
打赏
举报
回复
((*p++) <= (b) ? (*p++) : (*p++))
两次。这个问题的答案应该是definite的,因为?后面有一个序列点。
yecheng_110
2008-02-22
打赏
举报
回复
预编译一下
((*p++) <= (b) ? (*p++) : (b));
ltc_mouse
2008-02-22
打赏
举报
回复
写个小程序运行下,就知道结果了~
网上的资料也是人写的,谁都不能保证一定没有错误
c++面试题:#
define
MIN
(A,B) ( (A) <= (B) ? (A) : (B) )
本文探讨了如何正确地定义宏
MIN
来比较两个参数并返回较小值的
问题
,并通过具体的例子解析了宏定义中可能出现的副作用及其原因。
有以下宏定义, #
define
MIN
(A,B) ((A) <= (B) ? (A) : (B)) 请写出一种不能正确返回的情况?
本文深入探讨了宏定义在编程中的应用,强调其作为字符替换的特性,并通过实例展示了如何有效利用宏定义提高代码效率与可读性。
C语言:预处理_#
define
min
本文围绕C语言预处理指令展开。介绍了#
define
定义标识符和宏的方法、替换规则,以及#和##操作符的使用。还提及带副作用的宏参数应避免,对比了宏和函数的差异,说明了命名约定。此外,讲解了#undef移除宏定义、条件编译指令和文件包含时双引号与尖括号的使用。
#
define
宏定义的
min
与max函数的速度
问题
本文探讨了在C++中使用宏定义实现
min
和max函数的潜在
问题
,尤其是在涉及递归函数调用时,可能导致时间复杂度激增,从而引发程序超时错误(TLE)。通过对比不同实现方式的性能,揭示了宏定义在特定场景下的效率陷阱。
C语言 #
define
用法
本文介绍了C语言中#
define
预处理指令用于定义常量和简单函数的方式,并通过示例展示了#
define
定义函数可能遇到的陷阱,如表达式求值顺序
问题
。同时,给出了避免陷阱的解决方案,强调了正确使用括号的重要性。
C++ 语言
65,211
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章