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