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