Tal vez no soy de este planeta, pero me parece que lo siguiente debería ser un error de sintaxis:
int a[] = {1,2,}; //extra comma in the end
Pero no lo es. Me sorprendió cuando este código se compiló en Visual Studio, pero aprendí a no confiar en el compilador MSVC en lo que respecta a las reglas de C ++, por lo que verifiqué el estándar y también está permitido por el estándar. Puedes ver 8.5.1 para las reglas gramaticales si no me crees.
¿Por qué está permitido esto? Esta puede ser una pregunta estúpida e inútil, pero quiero que entiendas por qué te pregunto. Si se tratara de un caso secundario de una regla gramatical general, lo entendería: decidieron no hacer que la gramática general sea más difícil simplemente para no permitir una coma redundante al final de una lista de inicializadores. Pero no, la coma adicional está explícitamente permitida. Por ejemplo, no está permitido tener una coma redundante al final de una lista de argumentos de llamada a función (cuando la función toma ...
), lo cual es normal .
Entonces, de nuevo, ¿hay alguna razón particular por la cual esta coma redundante esté explícitamente permitida?
for()
por ejemplo), al agregarlo, se genera una advertencia del compilador.
if (x = 1)
no es ambiguo en la gramática, pero es muy ambiguo para los humanos, y por lo tanto arroja una advertencia.
if
ejemplo tampoco es ambiguo. ¡No creo que "ambiguo" signifique lo que crees que significa!
;
cuando está claro que el próximo token es en realidad una siguiente declaración?