| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1656 人关注过本帖
标题:关于“编译预处理和动态存储分配”的一个小小问题
只看楼主 加入收藏
wcghappy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-2-25
收藏
 问题点数:0 回复次数:13 
关于“编译预处理和动态存储分配”的一个小小问题
#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);
}

这个值为什么是15呢?
看看我算的哪里不对呗?
我的思路:宏定义里面的x与y被赋值成了10和15.
然后进行比较,判断x与y的大小,如果x<y成立,则输出x的值。
然后在通过公式:k=10*MIN(i,j) k=10*15=150 答案就是150 不对啊~~!  为什么是15呢?
搜索更多相关主题的帖子: 动态 预处理 编译 
2008-03-12 19:45
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
宏扩展了嘛。。。
10*10<15会先计算,100当然不小于15了

[[it] 本帖最后由 qfyzy 于 2008-3-12 19:51 编辑 [/it]]

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-03-12 19:50
wcghappy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-2-25
收藏
得分:0 
具体一下呗 初学者不是很明白的
2008-03-12 19:51
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
k=300-50*100*MIN(i,j);/*我想应这样理解,加前面任意项,把它当成逗号表达式运算*/
不行不太正确.

[[it] 本帖最后由 xianshizhe111 于 2008-3-12 20:01 编辑 [/it]]
2008-03-12 19:59
wcghappy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-2-25
收藏
得分:0 
还是不明白,具体点吧~
就是k到底等于什么?
2008-03-12 20:02
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
这个还的好好研究,研究宏.
2008-03-12 20:10
xfcyjhb
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:116
专家分:0
注 册:2008-2-26
收藏
得分:0 
#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);
}
看来2楼说的有道理,这样加个括号就行了。

多C多智慧,将C进行到底.........
2008-03-12 20:13
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
我把它扩展一下:

开始:
#define MIN(x,y) (x)<(y)?(x):(y)
k=10*MIN(i,j);

第一步:
#define MIN(i,j) (i)<(j)?(i):(j)
k=10*MIN(i,j);

第三步:
#define MIN(10,15) (10)<(15)?(10):(15)
k=10*MIN(10,15);

第四步:
k=10*(10)<(15)?(10):(15) ;

第五步:
k = (10*10) < (15) ? (10) : (15) ;

现在知道为什么是15了吗
收到的鲜花
  • qfyzy2008-03-12 20:21 送鲜花  3朵   附言:说的很详细了,希望能写一章关于宏的 ...
  • wcghappy2008-03-13 15:45 送鲜花  2朵   附言:真是太谢谢您了~! 您真是一个好版主~! ...

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-03-12 20:18
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{
    int i,j,k;
    i=10;
    j=15;
    /*k=1*MIN(i,j);*/
    k=10*(i)<(j)?(i):(j);
    printf("%d\n",k);
}
2008-03-12 20:21
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
C说得对啊,你把那个符号出现的地方直接换成宏定义里面的表达式,直接哦,不加多余的括号,你看看就知道了。
2008-03-12 20:33
快速回复:关于“编译预处理和动态存储分配”的一个小小问题
数据加载中...
 
   



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

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