|
![]() | 作者: sunwu [sunwu]
![]() |
登录 |
唉 真是郁闷呀 #include<stdio.h> #define MA(x) x*(x-1) main() { int a=3,b=4; printf("begin:\na=%d b=%d\n",a,b); printf("MA1=%d\n",MA(1+a+b)); printf("MA2=%d\n",(1+a+b)*((1+a+b)-1)); getchar(); printf("end!\n"); } 满以为MA1与MA2的结果应该是一样的。 可是输出的结果就是不一样。 哪位大侠给帮忙看一下? 先谢了。 |
地主 发表时间: 06-03-28 15:53 |
![]() | 回复: sunwu [sunwu] ![]() |
登录 |
#include<stdio.h> #define MIN(x,y) (x)<(y)? (x):(y) main() { int i,j,k; i=10; j=15; k=10*MIN(i,j); printf("%d\n",k); } 本以为会在屏幕打印出100,可是结果却是15。 ![]() ![]() |
B1层 发表时间: 06-03-28 16:45 |
![]() | 回复: sunwu [sunwu] ![]() |
登录 |
#include<stdio.h> main( ) { int a=3,b=3,k; k=(++a<0)&&(b--<0); printf("%d%d%d\n",k,a,b); } 你认为输出是多少? 042吗? 可输出是:043 这又是为什么呢? |
B2层 发表时间: 06-03-28 17:41 |
![]() | 回复: frostmoon [frostmoon] ![]() |
登录 |
printf("MA1=%d\n",MA(1+a+b));宏展开后就是printf("MA1=%d\n",1+a+b*(1+a+b-1));当然就出错了。。。 |
B3层 发表时间: 06-03-28 18:13 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
宏这个东西是在预编译的时候展开的,所谓预编译就是直没有编译 因此实际编译的东西就是楼上的朋友说的那样的 方法 #define MA(x) (x)*((x)-1) 第二个问题与第一个问题是相同的 比较实际上比较的是 10*x 与 y的大小,10*x = 100, y = 15, 因此条件为假,取后者,也就是(y),就是15 地三个问题在于与运算 这个问题有些意思,就是在&&前面那个条件为假的时候,自动的忽略后面的那条语句,因为条件是与,其中一个为假,整体不可能为真,所以后面的(b--<0)根本就没有执行 good luck & have fun [此贴被 月之御者(kert_t8) 在 03月28日18时56分 编辑过] |
B4层 发表时间: 06-03-28 18:55 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
哎呀第一个问题就是加括好啦,想要字体加粗怎么试也不成功,真是的![]() |
B5层 发表时间: 06-03-28 18:57 |
![]() | 回复: sunwu [sunwu] ![]() |
登录 |
感谢frostmoon,感谢月之御者。 你们这样一解释,我才明白过来。 谢谢两位网友的帮忙。 ![]() |
B6层 发表时间: 06-04-01 14:11 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号