c语言宏定义是不是不仅仅是简单的宏替换问题,有的时候也可以当做函数调用来使用?
经常会遇到这类问题,就是在进行宏定义的时候会出现类似于函数的问题。例如#definef(x)x*x,是不是如果后面执行到了f(2);语句,就会像是调用函数那样来使用宏定义...
经常会遇到这类问题,就是在进行宏定义的时候会出现类似于函数的问题。例如
# define f(x) x*x,是不是如果后面执行到了f(2);语句,就会像是调用函数那样来使用宏定义?难道宏定义不仅仅是简单的宏替换吗?就是说只有在遇到后面的f(x);给替换成 x*x,,,不是这么简单地问题ma ??哪位大神帮帮忙??
麻烦说的详细一点,,我对这方面还不是很了解。。。谢啦!! 展开
# define f(x) x*x,是不是如果后面执行到了f(2);语句,就会像是调用函数那样来使用宏定义?难道宏定义不仅仅是简单的宏替换吗?就是说只有在遇到后面的f(x);给替换成 x*x,,,不是这么简单地问题ma ??哪位大神帮帮忙??
麻烦说的详细一点,,我对这方面还不是很了解。。。谢啦!! 展开
1个回答
展开全部
宏定义不是函数,编译器会进行直译的。譬如你的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.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询