• Lucy :3@feddit.org
    link
    fedilink
    arrow-up
    7
    arrow-down
    4
    ·
    7 hours ago

    Should ≠ Needs to

    You can do it, and it will work, but it’s unclean and not best-practice. I wouldn’t be surprised if it’s undefined behaviour.

    • xmunk@sh.itjust.works
      link
      fedilink
      arrow-up
      18
      ·
      6 hours ago

      Just to clarify. It is defined behavior - there’s plenty of undefined behavior in C but that ain’t one of them.

      • FuckBigTech347@lemmygrad.ml
        link
        fedilink
        arrow-up
        1
        ·
        36 minutes ago

        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