• 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
            ·
            25 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