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

    这个才是我们想要的结果!

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-06-17
从你问的角度看 没有区别 这是个两个宏函数 f(x)替换为x*x或(x*x) 但从优先级看: fun(x)-> 将变成 x*x-> 显然和原先表达的意思不一样 (x*x)-> 意思就一样了 我只是举例本回答被提问者采纳

define f(x) x*x与 define f(x) (x*x)有什么区别
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 这个才是我们想...

c语言里#define f(x) (x*x)的“*”是什么意思?
define f(x) (x*x)就是定义了一个宏f(x),遇到此类的,在编译时,C系统就用(x*x)来替换。例如,f(a)就用 (a*a) 来替换;f(u+v)就用 (u+v*u+v)来替换。为了达到期望的效果,可以写为:f((u+v)),这样就用((u+v)*(u+v))来替换,就能达到原来的目标了。当然,为了方便,...

关于#define f(x) x*x一道题的理解
我说这是坏脑子的题目,f(x)=x*x 然后告诉学生们,f的变量是不能识别括号的,这是设计者的愚蠢,还给别人学!事实上我们就不 这么用,明知是个坑还去跳,那就不仅仅是设计者的愚蠢了?是盲目跟风的无知。正常的思路应该是:((4+4)*(4+4))\/((2+2)*(2+2))=4 C++编译器会不会这么...

C语言一个关于#define的问题 求求各位!
主要是#define没有加括号造成的,如果是下面这样就没有问题 define f(x) (x)*(x)这个是中国的C语言书的习题吧?真够无聊的。

用define运算,定义一个过程实现计算a 的三次方
类似C语言的这样: #define (a)+(b) math.cos(a)\/math.tan(b)+log(a*b)\/lg(e^3\/4);例如:如果想得到8,应该将 define f(x) x*x 改成 #define f(x) (x*x)宏定义的概念就相当于 #define ABC DEF 下面遇到ABC的地方都以DEF代替,这么一来。i=f(4+4)\/f(2+2);就成: i=...

C语言宏定义计算问题
答案是21 因为你定义的f(x) x*x ,而你下面的i=f(4+4)\/(2+2)中是讲4+4作为x的值,所以展开的时候是这样的, i=4+4*4+4 \/(2+2),所以结果是 i=4+16+1 ,当然是21了

C语言 第4题选什么???
宏定义#define square(x) x*x与#define square(x) (x*x)是有区别的。对于此题中的i = 64 \/ square(4)等价于:i = 64 \/ 4 * 4即i = 64,答案为A。如果宏定义为#define square(x) (x*x)则i = 64 \/ square(4)等价于:i = 64 \/ (4 * 4)即为4。

C语言typedef是干吗的?
#define f(x) x*x main( ) { int a=6,b=2,c; c=f(a) \/ f(b); printf("%d \\n",c); } 以下程序的输出结果是: 36。 因为如此原因,在许多C语言编程规范中提到使用#define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对: #define f(x) (x*x) 当然,如果你使用typedef...

#define f(x) x*x main() { int a=6,b=2,c; c=f(a)\/f(b); printf("%d...
完整程序是:include "stdio.h"define f(x) x*x int main(){ int a=6,b=2,c;c=f(a)\/f(b);printf("%d\\n",c);return 0;} \/\/c=f(a)\/f(b); 实际上在预编译时把f(x)直接用x*x替换了,c=a*a\/b*b,c=6*6\/2*2=36,是不会加括号的,要自己加括号#define f(x) ((...

全国计算机等级考试三级笔试试题及答案?
#define s(x) x*x#define f(x) (x*x)main(){ int i1,i2;i1=1000\/s(N); i2=1000\/f(N);printf(“%d %d\\n”,i1,i2);}15、下面程序的运行结果是: [18] 。void swap(int *a,int *b){ int *t;t=a; a=b; b=t;}main(){ int x=3,y=5,*p=&x,*q=&y;swap(p,q);...

相似回答