jhickey
jhickey

Reputation: 21

Is it more efficient to remove the else statement in C?

Is there any difference to a compiler between this code:

if(something == true) {return -1}
else {return 0}

and this code:

if(something == true) {return -1}
return 0;

Does the compiler interpret these differently and if so would the second example be more efficient in C?

Upvotes: 2

Views: 178

Answers (2)

pts
pts

Reputation: 87401

These two program snippets do the same. C compilers are free to generate different (slower or faster) code as long as it does the same. Most C compilers will generate the same code though, because they build the same intermediate representation first, and then they generate the code from that.

Upvotes: 3

Lundin
Lundin

Reputation: 215090

Generally any modern compiler should generate the same machine code for trivial examples such as this. Just watch the disassembly from any compiler such as gcc, enable optimizations and see for yourself. Examples:

#include <stdbool.h>

int example1 (bool something)
{
  if(something == true) 
    return -1;
  else 
    return 0;
}

int example2 (bool something)
{
  if(something == true) 
    return -1;
  return 0;
}

int example3 (bool something)
{
  return something==true ? -1 : 0;
}

int example4 (bool something)
{
  for(int i=something; i!=false; i++)
  {
    if(i)
      return -1;
  }
  return 0;
}

https://godbolt.org/z/1Kxxsbj9s

All of these examples boil down to the very same machine code, even the contrived example4 one:

    movzx   eax, dil
    neg     eax
    ret

That is, grab the input parameter and replace it with it's two's complement (neg), meaning either 1 -> -1 or 0 -> 0.

The optimizer also didn't generate any branch (conditional execution paths) which would have made the code slower on all high-end CPUs.

So which form to use is mostly a matter of style. Various safety standards (ISO 61508, ISO 26262, MISRA C etc) tend to quite subjectively frown at multiple return in a single function, so if you care about that, example3 might actually be the best one.

Upvotes: 2

Related Questions