If/then without curly braces?

In C a statement is either one of the simple statements such as assignment, or
a compound statement like if or while, or its a brace-delimited list of statements.

Anywhere you can use a statement you can use any statement type including { ... }

Hence:

  if (foo) 
    bar () ;   // simple statement

  if (foo)
    ;             // null statement

  if (foo)
    while (bar)   // while statement
      baz () ;

  if (foo)
    while (bar)
    {
       ...
    }

  if (foo)
  {
    while (bar)
    {
      ..
    }
  }

The "gotcha" in this is cases like this:

  if (foo) 
    if (bar)
      one() ;
  else
    two () ;


  if (foo) 
    if (bar)
      one() ;
    else
      two () ;

They are the same code, but do you know which if the else matches? This
is known as a "dangling else" and good style requires using braces here to
make the intent clear (the compiler has its own unambigous idea of how to
read this, the human reader is easily confused though)