社区
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作两次++自增操作阿,请高手给出正确答案
...全文
943
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
作业
写回复
配置赞助广告
用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
,这个宏输入两个参数并返回较小的一个。另外,当你运行”least =
MIN
(*p++, b); “代码时会发生什么事? 解答: #
define
MIN
(A,B) ( (A) <= (B) ? (A) : (B) )
MIN
(*p++, b)会产生宏的副作用。 剖析: 这道题考察对宏定义的使用,宏定义可以实现类似于函数的...
有以下宏定义, #
define
MIN
(A,B) ((A) <= (B) ? (A) : (B)) 请写出一种不能正确返回的情况?
时刻谨记 宏定义只是简单的字符替换
MIN
(a++,b++)
求最小值的宏:#
define
min
(x,y) x > y? y: x 中的陷阱,慎用
求最小值的宏:①#
define
min
(x,y) x > y? y: x。这个宏网上遍地都是,殊不知,这个宏存在严重bug。 顺便再列一下,下面这几个宏也存在严重bug,使用前一定要仔细考虑 ②#
define
min
(x,y) (x) > (y)? (y): (x) ③#
define
min
(x,y) ((x) > (y)? (y): ...
该宏#
define
min
(x,y) ((x) < (y) ? (x) : (y))会产生什么副作用?
这在标准c中,我们常用来求最小值,它有如下副作用,举例: 代码
min
(ia++,ib++) 用宏替代 ((ia++) 在linux系统中使用的是GNU c,是标准c的扩展,可以用宏就实现, #
define
min
_t(type,x,y) \ ({ type _ _x = (x); type _ _y = (y); _ _x
写一个标准宏
MIN
,输入两个参数,返回较小的
写一个标准宏
MIN
,输入两个参数,使得下面的函数返回较小的。 least =
MIN
(*p++,b); 错误的解法: #
define
MIN
(a,b) (a>=b?b:a) #
define
MIN
(a,b) (a)>=(b)?(b):(a) 正确的解法: #
define
MIN
(a,b) ((a)>=(b)?(b):(a)) 但是:
MIN
(*p++,b)
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章