什么也不管说,什么也不敢问
void main(){
uint32_t t1=5,t2=10;
uint8_t i,t3=0,t4=0;
for(i=0;i<10;i++)
{
if(t1*+i < t2)//不报错 知识盲区了
{
t3++;
}
else
{
t4++;
}
}
printf("t3=%d,t4=%d",t3,t4);
while(1);
}
t1*i < == >t1*+i 我用V6的编译器是会发警告
是不是你把警告屏蔽了?
keil 的默认编译器确实不会报错 这个真的是有点奇怪,如果是*t+i还好理解一些 我试了一下,我的MDK,armcc v5,
把 t1*+i 里面的+号,当成了 i 的正负号。 换成负号,也不报错,结果变成t1乘负的i。
会有警告的 反汇编看了下:
void main()
{
10420: e92d4800 push {fp, lr}
10424: e28db004 add fp, sp, #4
10428: e24dd010 sub sp, sp, #16
uint32_t t1=5,t2=10;
1042c: e3a03005 mov r3, #5
10430: e50b300c str r3,
10434: e3a0300a mov r3, #10
10438: e50b3010 str r3,
uint8_t i,t3=0,t4=0;
1043c: e3a03000 mov r3, #0
10440: e54b3006 strb r3,
10444: e3a03000 mov r3, #0
10448: e54b3007 strb r3,
for(i=0;i<10;i++)
1044c: e3a03000 mov r3, #0
10450: e54b3005 strb r3,
10454: ea00000f b 10498 <main+0x78>
{
if(t1*+i < t2)//不报错 知识盲区了
10458: e55b3005 ldrb r3,
1045c: e51b200c ldr r2,
10460: e0020392 mul r2, r2, r3
10464: e51b3010 ldr r3,
10468: e1520003 cmp r2, r3
1046c: 2a000003 bcs 10480 <main+0x60>
和1#楼 观点一致 t1*+i 等同 t1*i 我觉得这样挺好的哈哈哈哈 当正号处理估计写程序那个已经预料到这种情况了
页:
[1]