(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
が返されているようですが、このような仕事が保証されていますか、返されたときにローカル変数を参照しないと思われますか?Cはどのように構造体を返しますか?
あなたが返すものの型が構造体であるという意味で構造体を返しています。しかし、あなたが実際に返すのは、構造の価値です。したがって 'int f(){...'は 'f'が返すものの型が' int'であることを意味します。そして、 'return 5;'は、* value * 5を返すことを意味します。同様に 'int q = 3; return q; 'は' q 'の* value *を返すことを意味し、これは3です。実際には 'q'を返すわけではありません。 –