标题:比较两个程序,为什么一对一错?
只看楼主
sunnvya
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1094
专家分:0
注 册:2005-11-23
得分:0 
宏都快被淘汰了

http://www. 第二站>>>提供源码下载
2006-03-28 08:48
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
得分:0 
为了避免宏定义的歧义,请用这样格式严格定义宏:
#define R(x) ((x)*(x))
#define s(x) (((x)*(x)-1)*(x))

够坚固了吧!呵呵!
2006-03-28 09:04
风的呼吸
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-16
得分:0 

2006-03-29 22:06
zhangyuhangk
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-3-29
得分:0 
为了避免宏定义的歧义,请用这样格式严格定义宏:
#define R(x) ((x)*(x))
#define s(x) (((x)*(x)-1)*(x))

够坚固了吧!呵呵!
-------------------------------------------
12楼的够坚挺啊~~~
2006-03-30 01:52
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
呵呵,这样是牢固了,可是很烦了.

对不礼貌的女生收钱......
2006-04-07 17:58
Adminstrator
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-3-20
得分:0 

带有变量的宏定义不要有优先级差别

2006-04-07 22:15
Lunar
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-4-6
得分:0 
*的优先级比+和-都高,最好使用括号,虽然麻烦,但清楚又不易出错
2006-04-07 22:22
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
得分:0 
#include <stdio.h>
#define R(x) x*x
main()
{int a;
int i=4;
a=++R(i+2); /*相当于a=++i+2*i*2 ,计算时,先算++i,此时i=5,然后5+10+2就是17 */
printf("%d\n",a);}



程序2
#include <stdio.h>
#define s(x) (x*x-1)*x
main()
{int a=5,b,k;
k=s(a-2); /*相当于k=(a-2*a-2-1)*a-2=(5-2*5-2-1)*5-2=-42 */
b=++s(a-2); /*相当于b=++(a-2*a-2-1)*a-2。对于一个非变量是无法执行++这个运算符,所以编译不了*/
printf("%d,%d",k,b);
getch();}


我总结一点:宏反正就是替换,不要随意加括号

2006-04-08 10:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-52356-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.786493 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved