C语言中带参数的宏定义与函数的区别(试举例)

 我来答
魔鬼鱼0523
2012-11-29 · TA获得超过208个赞
知道答主
回答量:63
采纳率:0%
帮助的人:58.7万
展开全部
宏只是字符的替换,在预处理阶段就给替换到代码中去了比如下面的代码
#include<stdio.h>
#define MAX(x, y) ((x)>(y)?(x):y())
int main()
{
int a = 2, b = 4;
int m;
m = MAX(2, 4);
printf("%d\n", m);
return 0;
}
如果你用的是gcc编译器,执行 gcc -E main.c -o main.i,打开main.i文件就可以看到他是如何替换进去的,直接拖到最后,前面的都是stdio.h中的内容。
int main()
{
int a = 2, b = 4;
int m;
m = ((2)>(4)?(2):4());
printf("%d\n", m);
return 0;
}

函数就不同了,函数还需要分配栈空间,在执行函数时都要进行入栈和出栈操作,有的还需要分配堆空间。

宏所实现的功能有限,而且长代码不易读,但是对于逻辑简单、代码不长、经常使用的功能由宏来实现是个不错的选择
追问
麻烦把不同点一一列举(而且带例子),谢谢
追答
我说的这些基本上已经够了,如果简单的还不是很懂的话那些特别复杂宏也没有必要急着把他搞的那么全,毕竟写代码是在经验中不断总结和练习的,光靠罗列记忆找出C语言的一个知识点,把他搞的很深入用途不大
http://zhidao.baidu.com/question/225667215.html

如果你是面试的话可以借鉴下,但是实际用法只有在用了,动手去写代码了、自己编译了才能发现问题,到时候在探寻其他的功能不晚。而且这样会更深刻。你可以就你遇到的一个问题来问我。
宽厚还漂亮的桃花adc7
2012-11-29 · TA获得超过333个赞
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:134万
展开全部
#define MAX(a,b) (a>b ? a : b)//这是宏

int max(int a, int b)//这是函数
{
if(a > b)
return a;
else
return b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Derekwq
2012-12-03
知道答主
回答量:47
采纳率:0%
帮助的人:9.8万
展开全部
如果合理的使用宏,会提高代码的质量,而且宏用起来感觉也是很方便的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式