| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1631 人关注过本帖
标题:【提问】C库函数调用与参数宏的区别!
只看楼主 加入收藏
丁月文
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-23
收藏
 问题点数:0 回复次数:7 
【提问】C库函数调用与参数宏的区别!
以求最大值为例!!!

(1)使用库函数:
#include <stdlib.h>
main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=max(a,b);
printf("This is %d.\n",t);
getch();
}

(2)使用宏定义:
#define max(a,b) (a)>(b)?(a):(b)
main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=max(a,b);
printf("This is %d.\n",t);
getch();
}

请指点下:
一、
不知,(1)中在预编译后,是把库函数中的所以内容都被包括进来,还是只包括了,max()函数?

二、
我看了它的库函数,其中对max()的定义是这样的:
#define max(a,b) (((a) > (b)) ? (a) : (b))
(不知我这么说对不对?)按这样的话,在预编译后,那不就和例(2)的一样了吗?这不就,使得函数和预编译没区别了吗???又何来的函数调用???倒完全成了一个预处理了!!!


小弟对此处不是很明白,望大家指点一二!不胜感激!!!先谢过!!!
搜索更多相关主题的帖子: 库函数 参数 max 
2006-06-08 14:59
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
一、全部包含;
二、结果一样,流程不同;

我的原则很简单:不做不喜欢的事!
2006-06-08 15:05
丁月文
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-23
收藏
得分:0 

哦,谢谢!!!
我再看看!

2006-06-08 15:12
丁月文
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-23
收藏
得分:0 
#include "max.c"
main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=max(a,b);
printf("This is %d.\n",t);
getch();
}

若我自己也写个max.c文件,上面这个程序,也是个函数调用吧???那么在预处理后,是否就成为如下:
(和发表中的(2)一样吧!)
#define max(a,b) (a)>(b)?(a):(b)
main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=max(a,b);
printf("This is %d.\n",t);
getch();
}

而(2)在预编译后,其中的max(a,b)则会被替代!
2006-06-08 15:22
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(丁月文)C库函数调用与预处理的区别!...
楼主提的问题很好,可惜举的例不恰当。
在stdlib中max(a,b)不是函数而是带参数的宏
你的困惑很可能就是将它误作函数导致的。
顺便指出:stdio中的getchar()也是参数宏

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-08 17:13
丁月文
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-23
收藏
得分:0 
呵,是这样,你说对了,
我以为只要在库函数中的就是函数调用!!!
那就是说,我的第一个例子,实际上是个间接的宏定义了!!!!
呵,我问题清楚了,谢谢!!!

而这样,这两个相比,最好的,还是第二个例子了,那样,代码也小,对吧?
直接宏定义,不用包含那个库函数反好些了。
2006-06-08 17:23
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

版主说得极对,
至于函数和宏定义自然是有区别的,宏定义在预处理时就被编译器替代过来,而函数则是由编译器给程序指出函数入口地址,再进入执行,相比较而言,宏调用较好,少了调用函数的时间。
这其实就像C++里面的函数有没有加line一样.


对不礼貌的女生收钱......
2006-06-08 17:29
丁月文
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-23
收藏
得分:0 
谢了,把我的问题解决了,呵呵

一开始当然知道函数调用与宏的不同,

只是我后来看了库函数,才发现有那些宏定义,

想到宏定义,一比较,就想不通了,

原来,我一直以为用include调用库函数了,那就是函数调用!晕,这么简单的问题,这样说出来,我反明白了,呵呵!

谢过大家了!!!很简单的,让我给搞复杂了!
2006-06-08 17:35
快速回复:【提问】C库函数调用与参数宏的区别!
数据加载中...
 
   



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

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