【发布时间】:2011-07-18 09:50:55
【问题描述】:
(gdb) disas func
Dump of assembler code for function func:
0x00000000004004b8 <func+0>: push %rbp
0x00000000004004b9 <func+1>: mov %rsp,%rbp
0x00000000004004bc <func+4>: movl $0x64,0xfffffffffffffff0(%rbp)
0x00000000004004c3 <func+11>: movb $0x61,0xfffffffffffffff4(%rbp)
0x00000000004004c7 <func+15>: mov 0xfffffffffffffff0(%rbp),%rax
0x00000000004004cb <func+19>: leaveq
0x00000000004004cc <func+20>: retq
End of assembler dump.
t_test func()
{
t_test t;
t.i = 100;
t.c = 'a';
return t;
}
所以看起来它返回的是局部变量t,但是这种工作是否保证可以工作,返回时不应该不引用任何局部变量吗??
【问题讨论】:
-
你返回的是一个结构,因为你返回的东西的类型是一个结构。但是您实际上返回的是结构的值。所以
int f() { ...表示f返回的事物类型是int。return 5;表示我们正在返回 value 5。类似地,int q = 3; return q;表示我们正在返回q的 value,即 3。我们实际上并没有返回q。
标签: c struct x86-64 return-value calling-convention