c语言宏定义是不是不仅仅是简单的宏替换问题,有的时候也可以当做函数调用来使用?

经常会遇到这类问题,就是在进行宏定义的时候会出现类似于函数的问题。例如#definef(x)x*x,是不是如果后面执行到了f(2);语句,就会像是调用函数那样来使用宏定义... 经常会遇到这类问题,就是在进行宏定义的时候会出现类似于函数的问题。例如
# define f(x) x*x,是不是如果后面执行到了f(2);语句,就会像是调用函数那样来使用宏定义?难道宏定义不仅仅是简单的宏替换吗?就是说只有在遇到后面的f(x);给替换成 x*x,,,不是这么简单地问题ma ??哪位大神帮帮忙??
麻烦说的详细一点,,我对这方面还不是很了解。。。谢啦!!
展开
 我来答
lyhdez1
2012-10-08 · TA获得超过1942个赞
知道小有建树答主
回答量:687
采纳率:100%
帮助的人:846万
展开全部
宏定义不是函数,编译器会进行直译的。譬如你的f(2)被直接翻译为2*2
更多追问追答
追问
那这不就是跟调用函数的形式是一样的了吗?

# include
#define f(x) x*x
main()
{ int i ;int t;
i=f(3+3)/(2+1);
printf("%d\n",i);
}
顺便你能帮我看看这个问题是这么回事吗?为什么结果是13?
追答
虽然形式一样。但是本质不一样。函数调用时,机制是很复杂的,涉及到堆栈的东西,而宏调用就只是简单的c语句而已

宏定义是直译,要始终记住这一句:
i=f(3+3)/(2+1)通过编译之后为:i=3+3*3+3/(2+1)。所以值为13.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式