¿Por qué este uso de coma funciona en una expresión pero falla en una declaración?

Soy de lenguajes OOP de alto nivel, C # y Java, y recientemente comencé a rascarme la cabeza en C. Me siento C un poco extraño tan igual como se siente JS. Entonces quiero aclarar a continuación:

A continuación se muestra un error y eso parece intuitivo, ya que parece una sintaxis incorrecta incluso en los lenguajes OOP

int i=0,1,2;  

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

Sin embargo, a continuación funciona sorprendentemente:

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

¿Por qué es este comportamiento? ¿Tiene algún significado mantener ese comportamiento o solo algunos tecnicismos de análisis?

Respuestas a la pregunta(3)

Su respuesta a la pregunta