Well, you might have no expression added, but the compiler will do it for you anyway.
Source:
6.8.5.3 The for statement
1 The statement
for ( clause-1 ; expression-2 ; expression-3 ) statement
behaves as follows: The expression expression-2 is the controlling expression that is
evaluated before each execution of the loop body. The expression expression-3 is
evaluated as a void expression after each execution of the loop body. If clause-1 is a
declaration, the scope of any identifiers it declares is the remainder of the declaration and
the entire loop, including the other two expressions; it is reached in the order of execution
before the first evaluation of the controlling expression. If clause-1 is an expression, it is
evaluated as a void expression before the first evaluation of the controlling expression.
137)
2 Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a
nonzero constant
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf (page 135)