Once upon a time I was writing a C compiler in a computer science course on compilers. Part of the work involved using a C grammar in Backus Naur Form (BNF) like this. What struck me as odd was that the grammar for initializer lists allowed a list to end with a comma (so-called Dangling Comma). I tried it on my compiler, and others, and confirmed that it was allowed.
Example:
<initializer> ::= <assignment-expression>
| { <initializer-list> }
| { <initializer-list> , }
In C:
int array[] = { 1, 2, 3, };
My question: To this day, dangling commas are still a part of C, and other languages too, it seems. Why weren't they removed? (Assuming they don't have any "proper" function (I could be wrong), why did they propagate to other languages?)