That's not an initialisation; that's a subexpression, the left hand side of a comma expression. So, of course it will be executed: control enters that part, and only exits the loop when it reaches the next part, i.e., the loop condition.

Note that i = 1 is also not an initialisation: it is an assignment, although it does assign the initial value of i. If you wanted to initialise i, you would do that at the point of declaration.