Search code examples
cif-statementbraces

C language: if() with no else(): using braces fails


I'm confused on need for braces after IF() expression. When using IF(){...}ELSE{...} I'm used to using braces around both IF and ELSE blocks. But when I use no ELSE block it works with no braces and fails with braces:
works: IF()...
fails: IF(){...}
Example below, this is for a microcontroller

#include "simpletools.h"
int main()
{
  while(1)
  {
    print("button = %d\n", input(3));
    if(input(3) == 1)                      //works if no braces
      high(14);
      pause(50);
      low(14);
      pause(50);
  } //while
}   // main

Solution

  • A single statement follows the if. If you need multiple statements, they must be combined into a single compound statement.

    if (input(3) == 1)
        high(14);
    pause(50);
    low(14);
    pause(50);
    

    executes both pause functions and low regardless of what input returns. Where you put the newlines does not affect how C parses the code. You need braces to combine the 4 function calls into a single compound statement:

    if (input(3) == 1) {
        high(14);
        pause(50);
        low(14);
        pause(50);
    }
    

    The absence or presence of an else clause does not change anything, except that

    if (input(3) == 1)
        high(14);
    pause(50);
    else ...
    

    would result in an error, since the else is not joined to any if statement; the if concludes with the single statement high(14), and the pause(50) is a separate statement altogether, so the else is out of place.