Perdón si esta pregunta es ingenua. Considere el siguiente programa:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
En el ejemplo anterior, las declaraciones 5;y i;parecen totalmente superfluo, sin embargo, los compila el código sin advertencias o errores por defecto (sin embargo, GCC lanzar una warning: statement with no effect [-Wunused-value]advertencia cuando corrió con -Wall). No tienen ningún efecto en el resto del programa, entonces, ¿por qué se consideran declaraciones válidas en primer lugar? ¿El compilador simplemente los ignora? ¿Hay algún beneficio en permitir tales declaraciones?
;después. Complicaría el lenguaje agregar más reglas sobre cuándo las expresiones no pueden ser declaraciones
printf()? La declaración 5;básicamente dice "hacer lo 5que sea que haga (nada) e ignorar el resultado. Su declaración printf(...)es" hacer lo printf(...)que sea que haga e ignorar los resultados (el valor de retorno de printf()) ". C los trata de la misma manera. Esto también permite código como (void) i;dónde iestá un parámetro a una función que se voidutiliza para marcarlo como no utilizado deliberadamente.
printf()tienen un efecto, incluso si ignoras el valor que finalmente devuelve. Por el contrario 5;no tiene ningún efecto en absoluto.