|
发表于 2022-10-26 10:33:36
|
显示全部楼层
- 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
复制代码 |
|