Effect of semicolon after ‘for’ loop

Semicolon is a legitimate statement called null statement * that means “do nothing”. Since the for loop executes a single operation (which could be a block enclosed in {}) semicolon is treated as the body of the loop, resulting in the behavior that you observed.

The following code

 for (i=0;i<5;i++);
 {
     printf("hello\n");
 }

is interpreted as follows:

  • Repeat five times for (i=0;i<5;i++)
  • … do nothing (semicolon)
  • Open a new scope for local variables {
  • … Print “hello”
  • Close the scope }

As you can see, the operation that gets repeated is ;, not the printf.


* See K&R, section 1.5.2

Leave a Comment