unsequenced modification and access to 'a'
这个是什么意思呢?
意思就是说,标准没有说这个表达式的值是什么,编译器的作者就随便整吧
就是这样
我这边的这个编译器是这样整的,你那边的编译器有可能不是这样整的
int main(void) {
1139: 55 pushq %rbp
113a: 48 89 e5 movq %rsp,%rbp
113d: 48 83 ec 10 subq $0x10,%rsp
int a = 4;
1141: c7 45 fc 04 00 00 00 movl $0x4,-0x4(%rbp)
a += a -= a * a;
1148: 8b 45 fc movl -0x4(%rbp),%eax
114b: 0f af c0 imull %eax,%eax
114e: 29 45 fc subl %eax,-0x4(%rbp)
1151: 8b 45 fc movl -0x4(%rbp),%eax
1154: 01 45 fc addl %eax,-0x4(%rbp)
printf("%d\n", a);
1157: 8b 45 fc movl -0x4(%rbp),%eax
115a: 89 c6 movl %eax,%esi
115c: 48 8d 05 a1 0e 00 00 leaq 0xea1(%rip),%rax # 2004 <_IO_stdin_used+0x4>
1163: 48 89 c7 movq %rax,%rdi
1166: b8 00 00 00 00 movl $0x0,%eax
116b: e8 c0 fe ff ff callq 1030 <printf@plt>
return 0;
1170: b8 00 00 00 00 movl $0x0,%eax
}
1175: c9 leaveq
1176: c3 retq
|