For local objects in C, the definition and declaration are not distinguished. Unlike Java, all local variables must be defined at the beginning of their enclosing block, before any statements are reached. This restriction does not apply in C99.

{
  int x; /* a definition */

  x = 10; /* a statement */

  int y; /* illegal; follows a statement */
}

Furthermore, an iteration variable in a for loop cannot be declared within the initialisation of the statement:

{
  for (int x = 0; x < 10; x++) { /* illegal */
    /* ... */
  }
}

This restriction does not apply in C99.