- 论坛徽章:
- 0
|
本帖最后由 krein8964 于 2010-10-10 03:10 编辑
反汇编看一下才发现以前理解错了。
if、while、for等内部定义的变量也是在函数开始的时候压栈,花括号仅仅是限定内部定义的变量外部不可见,外部试图访问时编译器会报错。
反汇编后的代码- 00000000004004e4 <main>:
- 4004e4: 55 push %rbp
- 4004e5: 48 89 e5 mov %rsp,%rbp
- 4004e8: 48 83 ec 10 sub $0x10,%rsp
- 4004ec: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
- 4004f3: eb 23 jmp 400518 <main+0x34>
- 4004f5: 8b 45 fc mov -0x4(%rbp),%eax
- 4004f8: 89 45 f0 mov %eax,-0x10(%rbp)
- 4004fb: b8 1c 06 40 00 mov $0x40061c,%eax
- 400500: 48 8d 55 f0 lea -0x10(%rbp),%rdx
- 400504: 48 89 d6 mov %rdx,%rsi
- 400507: 48 89 c7 mov %rax,%rdi
- 40050a: b8 00 00 00 00 mov $0x0,%eax
- 40050f: e8 cc fe ff ff callq 4003e0 <printf@plt>
- 400514: 83 45 fc 01 addl $0x1,-0x4(%rbp)
- 400518: 83 7d fc 09 cmpl $0x9,-0x4(%rbp)
- 40051c: 7e d7 jle 4004f5 <main+0x11>
- 40051e: b8 00 00 00 00 mov $0x0,%eax
- 400523: c9 leaveq
- 400524: c3 retq
复制代码 |
|