完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
3个回答
|
|
带参数的宏展开顺序
#include《stdio.h》 #definef(a,b)a##b #defineg(a)#a #defineh(a)g(a) intmain(void) { printf(“%sn”,h(f(1,2))); printf(“%sn”,g(f(1,2))); return0; } 运行结果: 12 f(1,2) 浅析: 本题中的#运算符可以利用宏参数创建字符串。##运算符和#运算符一样也可以用于类函数宏的替换部分。另外,##还可以用于类对象宏的替换部分,这个运算符可以把两个语言符号组合成单个语言符号,所以该运算符也被成为“预处理粘合剂”。类参数宏展开遵循一定的顺序,先从外层开始探寻如果遇到#即刻结束探寻,从遇到#处开始一步一步向外层展开,如果没有遇到#探寻到最里层结束探寻,然后一步一步向外层展开。 所以printf(“%sn”,h(f(1,2)));这条语句的展开顺序为:h(f(1,2))(没有#) ---》》 f(1,2)(到达最里层依然没有#) ----》》 h(12) ----》》 12。然而printf(“%sn”,g(f(1,2)));这条语句的展开顺序是:g(f(1,2))(碰到#即刻结束探寻,开始展开) -----》》f(1,2) |
|
|
|
类型转换
#include《stdio.h》 intmain(void) { inta=-10; unsignedb=1; if(a+b》0) printf(“a+b》0n”); elseif(a+b《0) printf(“a+b《0n”); else printf(“a+b=0n”); return0; } 运行结果: a+b》0 浅析: 第一眼看到这道题心里想到这不明摆着-10+1《0么,如此easy的题目还要算吗?当程序运行出结果时顿时傻眼了,仔细看了看数据类型发现问题出在了类型的转换上。众所周知,在不同类型的数据进行运算时如果不进行特别的转换那么在数据运算时会先将表示范围较小的数据自动转换成表示范围更广的数,再参与运算,所以本题中会先将int型的a转换成unsignedint型,通过补码运算得知该值为:4294967286,该值加上1会肯定会远大于0,因此输出的是a+b》0。 |
|
|
|
溢出问题
程序一: unsignedi; for(i=110;i》=0;i--) printf(“%un”,i); 运行结果: 死循环 浅析: 该题的坑就在于没有注意到unsignedint的存储范围,当小于零溢出时又会从unsignedint的最大值开始递减,这就仿佛进入了一个圆环,永远都没有办法找到跳出圆环形跑道的缺口。 程序二: #include《stdio.h》 #include《string.h》 intmain(void) { chara[1000]; inti; for(i=0;i《1000;i++) a[i]=-1-i; printf(“%dn”,strlen(a)); return0; } 运行结果: 255 浅析: 这道题看上去很简单但是却暗藏杀机,很少有人能够答对,当i从0开始自增,自增到127时-1-127=-128,而这个数正好是char型变量所能表示的最小数字,i再自增一次就会溢出,变成char所能表示的最大数字,这样又进入了上一题的那个“环”,当i增加到255时-1-i=0,此时第一次出现了0,而strlen函数碰到‘ ’就结束(不包括),因此输出结果为255。 |
|
|
|
只有小组成员才能发言,加入小组>>
888 浏览 0 评论
1200 浏览 1 评论
2577 浏览 5 评论
2913 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2775 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1248浏览 3评论
227浏览 2评论
501浏览 2评论
410浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
489浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 18:19 , Processed in 1.125617 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号