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