Por que esse uso de vírgula funciona em uma expressão, mas falha em uma declaração?

Sou de linguagens OOP de alto nível, C # e Java, e recentemente comecei a coçar a cabeça em C. Sinto-me um pouco estranho em C, da mesma forma que um JS é. Então, quero esclarecer abaixo:

Abaixo, aparece um erro e isso parece intuitivo, pois parece com sintaxe incorreta, mesmo em idiomas OOP

int i=0,1,2;  

/*
Error : expected identifier or ‘(’ before numeric constant
 int i = 0, 1, 2;
            ^
*/

No entanto, abaixo funciona surpreendentemente:

int i;
i = 0,1,2;    //works

Por que esse comportamento? Existe algum significado para manter esse comportamento ou apenas alguns aspectos técnicos de análise?

questionAnswers(3)

yourAnswerToTheQuestion