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;
^~~
int
como un tipo de retorno para main
y no utilice ()
como una lista de tipos de parámetros en funciones, sino en su (void)
lugar.