扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你用的都是宏定义,宏定义编译的时候替换的。具体到你这个问题,PRINT1(FUDGE(5)*x);
创新互联公司主要从事做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务肇州,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
是这样替换的,FUDGE(5)*x这个整体作为参数宏定义里的参数a,这里面还有一个参数宏FUDGE(5),它是这么替换的,2.84+5。而在PRINT1这个宏里,替换后的参数为2.84+5*2。又因为你是int类型,所以输出为12。
一些建议:
宏里面只是简单替换,不会帮你改变运算顺序,如果需要请用小括号改变相关运算顺序。
PRINT1(FUDGE(5)*x);修改为PRINT1( ( FUDGE(5) ) *x);看看。
宏参数记得加上小括号。#define FUDGE(y) 2.84+y中的y写成 2.84+(y)
希望对你有所帮助。
FUDGE(5)*y展开时变成
2.84+5*y
=2.84+5*2
=12.84
所以结果是12。
应该这样这样定义:
#define FUDGE(y) (2.84+y)
则FUDGE(5)*y
=(2.84+5)*2
=15.68
结果是15.
38
将宏定义带入即可。
PRINT1(FUDGE(5)*x);
=
PR(FUDGE(5)*x);putchar('\n');
=
printf("%d",(int)(FUDGE(5)*x));putchar('\n');
=
printf("%d",(int)(2.84+5*x));putchar('\n');
x值为2, 2.84+5*x=12.84 转为int为12
于是这里输出12
选B
39
这里有两个i,中间{}里面用的i,和外面用的i不同。
执行第一个printf 打印外面的i值,1, 打印后,i自加为2
执行中间的{} i+=j*2 i=i+j*2=0+6=6
输出i和j,也就是6,3
然后输出下一个i和j,注意 这里是i是{}外面的i, 也就是自加后的2,
这里输出2,3
于是 输出
1,6,3,2,3
选B
注意,这里第一个和第二个printf少打了一个逗号按照现在程序 实际上输出的是
16,32,3
#include stdio.h
#define FUDGE(y) 2.84+y
#define PR(a) printf("%d",(int)(a))
#define PRINT1(a) PR(a);putchar('\n')
main()
{
int x=2;
PRINT1(FUDGE(5)*x);
}
对于以上程序 结果应该是12
要说明的是,FUDGE(y)等不是普通的函数,而是预编译宏,执行时不能按一般的算法思维
预编译是在程序编译之前就进行替换的,即
FUDGE(5)*x
在编译之前被替换成了
2.84+5*x,而不是(2.84+5)*x
这样在进行真正的编译的时候2.84+5*x=2.84+5*2=12.84
然后经过int强制转化变成12输出 o(∩_∩)o...
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流