C语言中带参数的宏定义与函数的区别(试举例)
3个回答
展开全部
宏只是字符的替换,在预处理阶段就给替换到代码中去了比如下面的代码
#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;
}
函数就不同了,函数还需要分配栈空间,在执行函数时都要进行入栈和出栈操作,有的还需要分配堆空间。
宏所实现的功能有限,而且长代码不易读,但是对于逻辑简单、代码不长、经常使用的功能由宏来实现是个不错的选择
#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
如果你是面试的话可以借鉴下,但是实际用法只有在用了,动手去写代码了、自己编译了才能发现问题,到时候在探寻其他的功能不晚。而且这样会更深刻。你可以就你遇到的一个问题来问我。
展开全部
#define MAX(a,b) (a>b ? a : b)//这是宏
int max(int a, int b)//这是函数
{
if(a > b)
return a;
else
return b;
}
int max(int a, int b)//这是函数
{
if(a > b)
return a;
else
return b;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果合理的使用宏,会提高代码的质量,而且宏用起来感觉也是很方便的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询