Warum funktioniert diese Verwendung von Komma in einem Ausdruck, schlägt aber in einer Deklaration fehl?

Ich komme aus den gehobenen OOP-Sprachen C # und Java und habe kürzlich angefangen, mich in C am Kopf zu kratzen. Ich fühle C ein bisschen seltsam, so wie man es von JS hält. Also unten klären wollen:

Below gibt einen Fehler aus und das scheint intuitiv zu sein, da es selbst in OOP-Sprachen nach falscher Syntax aussieht.

int i=0,1,2;  

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

Allerdings funktioniert unten überraschend:

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

Warum handelt es sich bei diesem Verhalten? Ist es für sie von Bedeutung, ein solches Verhalten beizubehalten, oder nur einige Analysetechniken?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage