社区
C++ 语言
帖子详情
#define max(a,b) ((a) > (b) ? (a) : (b))的问题
jjjjyyyyy
2005-10-24 12:59:14
int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次
别人的文章中看到的,增加几次是怎么发生的,应怎么理解啊?
请老师指导,不胜感谢!
...全文
2383
13
打赏
收藏
#define max(a,b) ((a) > (b) ? (a) : (b))的问题
int a = 5, b = 0; max(++a, b);// a 的值增加了2次 max(++a, b+10); // a 的值只增加了1次 别人的文章中看到的,增加几次是怎么发生的,应怎么理解啊? 请老师指导,不胜感谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
maojun1986
2005-12-20
打赏
举报
回复
学习...
sinall
2005-12-19
打赏
举报
回复
总之,分析的时候,你把你的语句用宏替换掉;转成普通语句就OK了。
Tycool
2005-12-19
打赏
举报
回复
注意这种macro的使用。
cunsh
2005-12-19
打赏
举报
回复
inline
shu_yoyo
2005-12-18
打赏
举报
回复
是这样的,,,好像是effectiv c++上的问题。
zhousqy
2005-12-18
打赏
举报
回复
都说了,LZ只要把参数代进去看看就知道了。
Mr_Yang
2005-12-18
打赏
举报
回复
都说完了,只能学习了。
zhujiujun
2005-12-18
打赏
举报
回复
up
doway
2005-10-24
打赏
举报
回复
根宏一点关系都没有,正确的写法:
a++;
max(a, b);
jixingzhong
2005-10-24
打赏
举报
回复
恩, 楼上说的正确!
用 宏定义 带来的问题之一就是这个问题了 ...
如果用的是模板, 就不会出现这种情况了 !! 建议使用模板 !!
寻开心
2005-10-24
打赏
举报
回复
#define max(a,b) ((a) > (b) ? (a) : (b))
这是宏定义, 实际编译器在遇到这个max的定义的时候,自动用展开后编译的
展开的时候,用a和b的表达式直接替换内容的
以 max(++a, b) 为例子,实际编译器处理的就是
(++a>b)? ++a:b;
所以++a在实际使用的时候是被多次调用的
把宏定义,改成模板方式可以解决这个问题,保证只调用一次++操作
snowbirdfly
2005-10-24
打赏
举报
回复
int a = 5, b = 0;
max(++a, b);
代入 #define max(a,b) ((a) > (b) ? (a) : (b))
就是((++a) > (b)) ? (++a):(b)
++a = 6 > 0,所以执行++a,所以a加了2次
max(++a, b+10)
代入#define max(a,b) ((a) > (b) ? (a) : (b))
就是((++a) > (b+10)) ? (++a):(b+10)
由于++a = 6 > 10?所以执行b + 10,a 的值只增加了1次
qfeng_zhao
2005-10-24
打赏
举报
回复
max(++a, b);// a 的值增加了2次
宏展开就是:
((++a) > (b) ? (++a) : (b))
因为++a>b为true, 所以其值为前一项即:++a,所以a共加了2次
max(++a, b+10); // a 的值只增加了1次
(++a) > (b+10)为false,所以其值取后一项,即b,忽略了前一项++a所以a共计算一次
172集通俗易懂的C语言从入门到项目实战教程
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个
问题
: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述
问题
进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#
define
和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。
#
define
MAX
(a, b, ……)
用宏定义
MAX
(a,b)求两个数最大值:#
define
MAX
(a,b) a>b?a:b用宏定义
MAX
(a,b,c)求三个数最大值:#
define
MAX
(a,b,c) (a>b?(a>c?a:c):(b>c?b:c))用宏定义
MAX
(a,b,c,d)求四个数最大值:#
define
MAX
(a,b,c,d) (a>b?a:b)>(c>d?c:d)?(a>b?a:b):(c>d?c:d)
定义一个宏,不用if < >判断大小
方法一: #
define
max
(a,b) ((a) + (b) + abs((a) - (b))) / 2 if a > b则 (a+b+a-b)/2 = a if a 方法二: #
define
max
(a,b) ((((a) - (b)) >> 31)?(b):(a)) 一个int的31位是符号位,右移31位,为0则为正则a大,否则b大 方法三: #
define
ma
如何用宏定义的方式实现
MAX
(A,B),
MAX
(A,B,C),
MAX
(A,B,C,D)
#
define
MAX
(A,B) ((A)>(B)?(A):(B)) #
define
MAX
(A,B,C) ((A)>(B)?(A):(B))>C?((A)>(B)?(A):(B)):C #
define
MAX
(A,B,C,D) ((A)>(B)?(A):(B))>((C)>(D)?(C):(D))?((A)>(B)?(A):(B)):((C)>(D)?(C):(D)) 测试代码如下:
#234 宏定义与使用
题目描述: 编写程序,定义宏 #
define
MAX
(a,b) (a>b)? a : b 然后利用此宏,从输入的三个整数中找出最大数,并输出。 例如: 输入为 1,5,12回车 输出为 12 参考代码: #include <stdio.h> #
define
MAX
(a,b) (a>b)?a:b int main() { int a,b,c,
max
; scanf("%d,%d,%d",&a,&b,&c);
max
=
MAX
(a,b
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章