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?