Al mirar la gramática BNF de C, pensé que era extraño que la regla de producción para una declaración se viera así (de acuerdo con https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% 20C% 20in% 20Backus-Naur% 20form.htm ):
<declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ;
¿Por qué usar un *cuantificador (que significa cero o más ocurrencias) para el init-declarator? Esto permite que declaraciones como int;o void;sean sintácticamente válidas, aunque sean semánticamente inválidas. ¿No podrían haber usado un +cuantificador (una o más ocurrencias) en lugar de *en la regla de producción?
Intenté compilar un programa simple para ver qué genera el compilador y todo lo que hace es emitir una advertencia.
Entrada:
int main(void) {
int;
}
Salida:
test.c: In function ‘main’:
test.c:2:5: warning: useless type name in empty declaration
int;
^~~
intcomo un tipo de retorno para mainy no utilice ()como una lista de tipos de parámetros en funciones, sino en su (void)lugar.