Declarations/definitions as statements in C and C++

C++ allowed that the “substatement” of an iteration statement was implicitly a compound statement ([stmt.iter])

If the substatement in an iteration-statement is a single statement and not a compound-statement, it is as if
it was rewritten to be a compound-statement containing the original statement. Example:

while (--x >= 0)
   int i;

can be equivalently rewritten as

while (--x >= 0) {
   int i;
}

the C standard does not have this language.

Additionally, the definition of a statement changed in C++ to include a declaration statement, so even if the above change wasn’t made, it would still be legal.


The reason that adding braces makes it work is because your declaration now becomes a compound-statement which can include declarations.

You are allowed to have an identifier in a loop body without braces, so you can do this instead:

int a = 5;
for (int i = 0; i < 4; ++i)
    a;

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)