Error message is caused by your
int main (void), making it a function declaration rather than a function definition. For a function definition, a code block in curly braces follows that line, not a semicolon. Inside those braces is the code that belongs to the function.
Function declaration (not required for
main, as you would not call that yourself, but for functions you call above their implementation):
returnType funcName (paramType1, paramType2);
This informs the compiler about the function signature, from that point in code on the function can be used, even if it is implemented later. Parameter names can be supplied to match the function definition, but are ignored.
returnType funcName (paramType1 paramName1, paramType2 paramName2)
/* code in function */
That's the actual implementation. Unless you specify
void for explicitly not accepting any arguments, parameter names are required.
As other answer's author Ste Bunting pointed out, the increment line should be inside the curly braces, otherwise it becomes the only statement in the loop, with the print function being executed once after the loop has finished.
x = x++; creates an infinite loop.
x++ is evaluated. While evaluating,
x is incremented, but the expression
x++ evaluates to pre-increment value of
++x, which would evaluate to post-increment value of
x. Then you assign that old value to
x you just got, reverting the increment. Use just
++x;, without an assignment.