宏定义的时候为什么要加那么多括号

xibuhaian2022-10-04 11:39:541条回答

宏定义的时候为什么要加那么多括号
比如 A*B 为什么要写成 ((A)*(B))
我想直接加一个外面的括号 写成 (A*B)不就行了?

已提交,审核后显示!提交回复

共1条回复
BrightUp 共回答了21个问题 | 采纳率81%
多加那些括号是必须的.
比如有宏定义 :fn(A,B) (A*B)
那么如果你在代码中写 fn(1+2,3+4)
那么预处理的结果就成了 1+2*3+4,不是你要的结果了吧.
1年前

相关推荐

6.有如下宏定义 #define s(a) a*3 ,则执行表达式x=s(1+2)后,变量x的值为( D).A.10 B
6.有如下宏定义 #define s(a) a*3 ,则执行表达式x=s(1+2)后,变量x的值为( D).A.10 B.9 C.8 D.
答案为什么不是b啊,求高手相助,
alexwy1年前1
传说_1 共回答了20个问题 | 采纳率95%
编译的时间 x=s(1+2)就会宏替换成 1+2*3,所以等于7
想要等于9 就要
#define s(a) (a)*3
C语言 选择题设以下是宏定义:#define N 3#define Y(n) (N+1*n) 则执行语句:z=2*(N*
C语言 选择题
设以下是宏定义:
#define N 3
#define Y(n) (N+1*n)
则执行语句:z=2*(N*Y(5+1));后,z的值为( )
A.30 B.72 C.48 D.54
9830401年前1
dfgg66 共回答了16个问题 | 采纳率100%
宏定义需要把握“原样代入”的原则,不要自己主管加括号
z
=2*(N*Y(5+1))
=2*(N*(N+1*5+1))
=2*(3*(3+1*5+1))
=2*(3*9)
=2* 27
=54
选择D
.宏定义 #define fun(a,b,x) a*x+b ,请写出下列语句的输出结果是
.宏定义 #define fun(a,b,x) a*x+b ,请写出下列语句的输出结果是
.宏定义 #define fun(a,b,x) a*x+b ,请写出下列语句的输出结果是 、 .
printf(“%d %dn”,fun(1,2,3),fun(fun(2,3,4),5,6))
abc52541年前1
lianggdufs 共回答了26个问题 | 采纳率80.8%
fun(1,2,3)1*3+2
结果为 5fun(fun(2,3,4),5,6)2*4+3*6+5
结果为 31
C语言宏定义计算问题有如下程序: #define f(x)x*x  main()  { int i ;   i=f(4+
C语言宏定义计算问题
有如下程序:
#define f(x)x*x
  main()
  {
int i ;
   i=f(4+4)/(2+2);
   printf(“%dn”,i);
}
  该程序执行后的输出结果是______
我计算的结果是4+4*4+4/(2+2)=20 答案来了个21,求解正确解法及答案
389015501年前1
jsjerji 共回答了16个问题 | 采纳率87.5%
i=f(4+4)/(2+2);
这里要注意,在编译的时候,编译成目标文件时实际是这样的:
i=f(8)/4;
也因为这个特点,在定义宏的时候可以这样写:
#define _K 1024
#define _M (1024*_K)
#define _G (1024*_M)
这样写,不会让处理器多做乘法运算,而是编译器帮忙干完了这个活
C语言问题已知有宏定义#define SQR(a) 2*a*a,则SQR(3+4)的值为( ). A、22 B、32 C
C语言问题
已知有宏定义#define SQR(a) 2*a*a,则SQR(3+4)的值为( ).
A、22 B、32 C、98 D、18
= = 答案是A呀 要是C的话我还问是有病吗?
一行鹭1年前1
糟糟喜欢逮猪 共回答了26个问题 | 采纳率92.3%
宏定义是直接替换
那么sqr(3+4)

2*3+4*3+4=6+12+4=22
有表达式 x= TWO *5,则下列宏定义其替代形式分别为( ) ①#define ONE
有表达式 x= TWO *5,则下列宏定义其替代形式分别为( ) ①#define ONE
有表达式 x= TWO *5,则下列宏定义其替代形式分别为( )
①#define ONE 10
#define TWO ONE+ONE
②#define ONE 10
#define TWO(ONE+ONE)
求结果?为什么?
水云洛1年前1
jodan2002 共回答了16个问题 | 采纳率93.8%
选答案②,宏展开的结果是(10+10)*5,这是符合TWO*5的原意的,答案①展开的结果是10+10*5,不符合原意.
C语言:已知有宏定义#define M 3+2 请问表达式3*M*3的值是
C语言:已知有宏定义#define M 3+2 请问表达式3*M*3的值是
A.45 B.27 C.28 D.15
为什么是15 不是45
peterwen33771年前1
没有壳的鸡蛋 共回答了17个问题 | 采纳率82.4%
因为编译时遇到宏只是展开,在没有加括号的情况下,3*M*3 展开为 3*3+2*3,所以是15.
一般定义宏都强调注意这点,要加括号
#define M (3+2)
这样就能得到45了.
20. 设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z的值为( )。
20. 设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z的值为( )。
20. 设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z的值为( )。
#define N 3
#define Y(n) ((N+1)*n)
A.出错 B. 42 C. 48 D. 54
padzc1年前1
绕绕手作设计室 共回答了24个问题 | 采纳率95.8%
z=2*(N+Y(5+1));
分步来替换,先替换Y(n)
z=2*(N+ ((N+1)*5+1) );
再替换N
z=2*(3+((3+1)*5+1) ); = 2*(3+4*5+1)=2*24=48
选C
有宏定义:#define f(x) x*x,则表达式f(2+2)/f(1+1)的值为
有宏定义:#define f(x) x*x,则表达式f(2+2)/f(1+1)的值为
A.2 B.10 C.3 D.4
稻穗2251年前1
森林雾 共回答了20个问题 | 采纳率100%
f(2+2)/f(1+1)
=2+2*2+2/1+1*1+1
=2+4+2+1+1
=10
c语言宏定义已知宏定义#define p(x,y,z) x=y*z;,则宏替换p(a,x+5,y-3.1)应为( )。
c语言宏定义
已知宏定义#define p(x,y,z) x=y*z;,则宏替换p(a,x+5,y-3.1)应为( )。 ~~~~~~~~~~~ A.a=x+5*y-3.1; ~~~~~~~~~ B. a=(x+5)*(y-3.1); ~~~~ C. a=x+5*y-3.1 ~~~~~~~~ D. a=(x+5)*(y-3.1)
请问c为什么不对
想努力活着1年前1
lijiajing 共回答了15个问题 | 采纳率86.7%
C语言的宏机制就是按位置替换,不加其它修饰
那么x的位置替换成a
y的位置替换成x+5
z的位置替换成y-3.1
最后就出来了一个和本意不同的式子
a=x+5*y-3.1;
这里还要注意定义宏的时候不需要分号
所以x=y*z;后面那个分号也是宏的
C没有那个分号,所以错啦~
设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=4*MAX(2,3)的值为( ).A、
设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=4*MAX(2,3)的值为( ).A、3 B、2 C、12 D、8
答案为什么是B而不是C啊,不懂.
大鹏爱宝宝1年前1
b31998 共回答了16个问题 | 采纳率93.8%
#define直接定义的宏相当于替代.
F=4*MAX(2,3)
相当于F=4*2>3?2:3;也就是F=8>3?2:3;所以F=2;
故选B,而非C;
注意与F=4*(MAX(2,3))的区别!
宏定义为:#define fun(x,y) 2*x+1/y,按fun(1+4,(2+3))使用宏后,得到的指是()
shijian2k1年前1
xiaoxinping79 共回答了22个问题 | 采纳率90.9%
#define fun(x,y) 2*x+1/y

fun(1+4,(2+3))//单纯的进行字符串替换
=> 2*1+4+1/(2+3)
所以等于2 + 4 + 0 = 6(注意后面1/6是整除)
设有宏定义命令:#define SUM 2+3 则表达式5+SUM*5的值为() A)50 B)30 C)22 D)20
thinkalong1年前1
想晒太阳的猫 共回答了15个问题 | 采纳率80%
22
因为define只把SUM当作一个名称看待
所以结果为5+2+3*5=22
请编写程序,通过键盘输入圆半径r和高h,输出圆周长s,圆柱体积vz,要求,宏定义圆周率,取3.14159
请编写程序,通过键盘输入圆半径r和高h,输出圆周长s,圆柱体积vz,要求,宏定义圆周率,取3.14159
1 输入数据以空格键开
2输出在同一行,先周长,后体积,以空格隔开,保留两位有效数字
爱你比永远多两天1年前1
眼里只有你 共回答了11个问题 | 采纳率81.8%
# include
# define PI 3.14159
main()
{
x09int r,h;
x09float s,vz;
x09scanf("%d %d",&r,&h);
s=r*r*PI;
x09vz=s*h;
x09printf("%f %fn",s,vz);
}
一道C++题目,求详解对于以下宏定义:#define M(x) x*x #define N(x,y) M(x)+M(y)
一道C++题目,求详解
对于以下宏定义:#define M(x) x*x #define N(x,y) M(x)+M(y)
宏调用N(2,2+5)执行后,值为A
A.21
B. 53
C. 19
D. 51
radeon-hong1年前1
fuxiaoj 共回答了17个问题 | 采纳率82.4%
直接代入即可,N(2, 2 + 5) = M(2) + M(2 + 5) = 2 * 2 + 2 + 5 * 2 + 5 = 21
这道题主要是考的宏调处时,编译器是怎么处理的。
编译器在这里只做简单的替换,不会给你自动加括号。
所以一般在用宏定义时,最好加上括号,才能得到想要的结果。
这这道题改成如下形式,
#define M(x) (x*x)
#define N(x,y) (M(x)+M(y))
便是写宏定义的规范形式。
设有宏定义#define ma(x) x*(x-1),且a=1,b=2,则ma(1+a+b)的值为多少
ll时代1年前0
共回答了个问题 | 采纳率
若有以下宏定义:#define N 3 #define Y(n) ((N+1)*n) ,执行语句“z=2*(N+Y(5+
若有以下宏定义:#define N 3 #define Y(n) ((N+1)*n) ,执行语句“z=2*(N+Y(5+1));”后,Z的值是?
答案是48..为什么?
永远女主角1年前1
xxxllllll 共回答了21个问题 | 采纳率81%
Y(5+1) = ((3+1)*5+1)
z = 2*(3+((3+1)*5+1)) = 2*(3+21) = 48
陷阱在于Y(n)的定义,若改为:
#define Y(n) ((N+1)*(n))
则z的值为54.
4.宏定义“#define DIV(a,b) a/b”,经DIV(x + 5,y - 5) 引用,替换展开后是 .
4.宏定义“#define DIV(a,b) a/b”,经DIV(x + 5,y - 5) 引用,替换展开后是 .
A.x + 5 / y - 5 B.x + 5 / y – 5
C.(x + 5) / (y - 5) D.(x + 5) / (y - 5);
看不出AB有什么区别啊
jjzhzh1年前1
mahui000 共回答了24个问题 | 采纳率91.7%
你好,这个考验视力,很不幸,A,B确实一样除了减号小一点,
所以我觉得A,B都是正确的,
希望回答能帮到你,哪里不清楚再问.