Declarações / definições como declarações em C e C ++

Fiquei confuso quando isso não seria compilado em C:

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

    return 0;
}

Estou acostumado a C ++, onde isso irá compilar. Fiquei pasmo por um tempo até me lembrar de uma resposta aqui no SO sobre como coisas diferentes em C e C ++ são consideradas "declarações". Isso foi em relação a uma declaração de troca. Uma "declaração" após os parênteses do loop for deve estar presente em C e C ++. Isso pode ser feito adicionando um ponto-e-vírgula ou criando um {} bloco de colchete ondulado.

Em C ++ "int a = 7;" é considerado uma declaração, definição e inicialização. Em C, acredito que também é considerado tudo isso, mas em C não é considerado uma "declaração".

Alguém poderia esclarecer exatamente por que em C isso não é uma declaração, enquanto em C ++ é? Isso está confundindo meu conceito sobre o que é uma afirmação, porque uma linguagem diz que é e outra diz que não, então estou meio confusa.

questionAnswers(4)

yourAnswerToTheQuestion