Effect of semicolon after 'for' loop

c, for-loop, loops

Solution

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

Problem

Say I want to print a message in C five times using a `for` loop. Why is it that if I add a semicolon after for loop like this: ``` for (i=0;i<5;i++); ``` the message does not get printed 5 times, but it does if I do not put the semicolon there?

Original source