宏替换#typedef definee f(x) x *...

c语言 define f(x)(x*x) 和 define f(x) x*x 之间的差别_百度知道
c语言 define f(x)(x*x) 和 define f(x) x*x 之间的差别
define是C语言中的宏定义关键字,其定义格式如下:#define&[MacroName] & [MacroValue]宏定义分为普通宏定义和带参数的宏定义//普通宏#define&PI (3.1415926)//带参数的宏 (宏函数)#define&max(a,b) ((a)&(b)? (a),(b))注意变量在宏中要用括号括起来,因为,在C语言中define宏定义在编译时,会被展开,进行“傻瓜式”替换,也称为“字面”替换,如果没有括号有可能会产生歧义。如:int&a,b,c,d,e;a=1;b=2;c=6,d=4;e=f(a+b)&*&f(c+d)&;&&//理论值e=9*100=900#define f(x)(x*x)替换结果为:e=(a+b*a+b)*(c+d*c+d) = 5*34=170#define f(x) x*x&替换结果为:e=a+b*a+b*c+d*c+d=1+2+12+24+4=43#define f(x) ( (x)*(x) )&替换结果为:e=( (a+b)*(a+b)*(c+d)*(c+d) )=3*3*10*10=900这个才是我们想要的结果!
其他类似问题
为您推荐:
提问者采纳
fun(x)-& 显然和原先表达的意思不一样 (x*x)-& 将变成 x*x-&gt从你问的角度看 没有区别 这是个两个宏函数 f(x)替换为x*x或(x*x) 但从优先级看
define的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁> 问题详情
define能作简单的替代,用宏来替代计算多项式5 *x*x5*x5的值的函数f,正确的宏定义语句为( )。A.
悬赏:0&答案豆
提问人:匿名网友
发布时间:
#define能作简单的替代,用宏来替代计算多项式5 *x*x+5*x+5的值的函数f,正确的宏定义语句为( )。A.#define f(x) 5*x*x+5*x+5B.#define f5*X*x+5*x+5C.#define f(a) (5*a*a+5*a+5)D.#define(5*x*x+5*x+5) f(x)请帮忙给出正确答案和分析,谢谢!
网友回答(共0条)
我有更好的答案
您可能感兴趣的试题
1下列程序的输出结果是(&&)。&#included stdi0.h&&#included string.h&&void fun(int b[])&{&static&int i=0;&do {&b[i]+=b[i+1]; }while(++i&2);&}&main&{&int&k,a[5]={1,3,5,4,9};&fun(a);&for(k=0;k&5;k++)printf(&%d&,a[k]); }A.13579B.48579C.48549D.489992若有定义:“int a=4,b=5;float x=3.4,y=2.1;”,则下列表达式的值为(&&)。 (float)(a+b)/2+(int)x%(int)y;A.5.5B.55C.5.500000D.55.00000
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……c语言宏定义是不是不仅仅是简单的宏替换问题,有的时候也可以当做函数调用来使用?_百度知道
c语言宏定义是不是不仅仅是简单的宏替换问题,有的时候也可以当做函数调用来使用?
经常会遇到这类问题,就是在进行宏定义的时候会出现类似于函数的问题。例如# define f(x) x*x,是不是如果后面执行到供罚垛核艹姑讹太番咖了f(2);语句,就会像是调用函数那样来使用宏定义?难道宏定义不仅仅是简单的宏替换吗?就是说只有在遇到后面的f(x);给替换成 x*x,,,不是这么简单地问题ma ??哪位大神帮帮忙??
麻烦说的详细一点,,我对这方面还不是很了解。。。谢啦!!
提问者采纳
宏定义不是函数,编译器会进行直译的。譬如你的f(2)被直接翻译为2*2
那这不就是跟调用函数的形式是一样的了吗?# include &stdio.h&#define
f(x) x*xmain(){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.
宏替换可是可以像函数那样调用吗》》我的意思不是完全跟函数一样,替换不是只有在遇到f(x)的时候替换成x*x吗??也可以像函数调用那样把x设成是形参吗?这个很不理解。。。
只要你能达到相同的目的,也是可以的。其实C函数库里就有一堆函数其实就是宏定义。比如min求几个数中的最小值。所以说不管是不是函数,我们要做的就是要达到相同的效果。比如上面的例子,如果想要达到(3+3)*(3+3)/(2+1)其实很简单。只要改为:i=f((3+3))/(2+1);就行了,这样在直译的时候会多出小括号。提句题外话,宏定义的执行速度要比函数快。
提问者评价
嗯,差不多懂了。。谢谢你啊,,看来我得系统的学学宏定义了,它不是我想的那么简单的事啊
来自团队:
其他类似问题
为您推荐:
宏定义的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言请详尽分析:#define F(x) x*i=F(4+4)/F(2+2);输出i值_百度知道
c语言请详尽分析:#define F(x) x*i=F(4+4)/F(2+2);输出i值
提问者采纳
i=4+4*4+4/2+2*2+2=4+16+2+4+2=28
提问者评价
感谢解惑!
来自团队:
其他类似问题
为您推荐:
其他3条回答
2+2*2+2 = 4+16+2+4+2=28 注意;F(2+2) = 4+4*4+4&#47因为定义了 F(x) 是x*x所以,你的宏定义没有带括号,所以替换后,运算顺序可能和你想象的不一样,但是计算机只会按照替换后的表达式来判断运算优先级,只需要把这个带入原式就可以得到结果了。i=F(4+4)&#47
i=16*16/4*4=16
i=8*8/(4*4)=4
define的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁若有宏定义:#define f(x) x*x ,则当b=2时,执行f(b+1)的值是_________百度知道
若有宏定义:#define f(x) x*x ,则当b=2时,执行f(b+1)的值是________
提问者采纳
宏直接展开2+1*2+1 = 5
提问者评价
来自团队:
其他类似问题
为您推荐:
宏定义的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 typedef define 的文章

 

随机推荐