Interesting feature, I had no idea. I just verified this with gcc and indeed the return register is always set to 0 before returning unless otherwise specified.
spoiler
int main(void)
{
int foo = 10;
}
produces:
push %rbp
mov %rsp,%rbp
movl $0xa,-0x4(%rbp) # Move 10 to stack variable
mov $0x0,%eax # Return 0
pop %rbp
ret
int main(void)
{
int foo = 10;
return foo;
}
produces:
push %rbp
mov %rsp,%rbp
movl $0xa,-0x4(%rbp) # Move 10 to stack variable
mov -0x4(%rbp),%eax # Return foo
pop %rbp
ret
Hey now, markdown serves it's purpose. It's not great, but as a web dev, I don't want people expecting full WYSIWYG editors in every website cause fuck that!