Declaraciones / definiciones como declaraciones en C y C ++

Estaba confundido cuando esto no se compilaría en C:

int main()
{
    for (int i = 0; i < 4; ++i)
        int a = 5; // A dependent statement may not be declaration

    return 0;
}

Estoy acostumbrado a C ++ donde esto se compilará. Solo me quedé boquiabierto por un tiempo hasta que recordé una respuesta aquí en SO sobre cómo en C y C ++ diferentes cosas se consideran "declaraciones". Esto fue con respecto a una declaración de cambio. Una "declaración" después de los corchetes for debe estar presente tanto en C como en C ++. Esto se puede hacer agregando un punto y coma o creando un {} bloque de corchete ondulado.

En C ++ "int a = 7;" se considera una declaración, definición e inicialización. En C creo que también se considera todo esto, sin embargo, en C no se considera una "declaración".

¿Podría alguien aclarar exactamente por qué en C esto no es una declaración mientras que en C ++ sí lo es? Esto confunde mi concepto de lo que es una declaración, porque un idioma dice que es y otro dice que no lo es, así que estoy un poco confundido.

Respuestas a la pregunta(4)

Su respuesta a la pregunta