Perdoe se esta pergunta é ingênua. Considere o seguinte programa:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
No exemplo acima, as demonstrações 5;
e i;
parece totalmente supérfluo, mas os compila código sem avisos ou erros por padrão (no entanto, gcc faz lançar um warning: statement with no effect [-Wunused-value]
aviso quando correu com -Wall
). Eles não têm efeito sobre o restante do programa, então por que são considerados declarações válidas em primeiro lugar? O compilador simplesmente os ignora? Existem benefícios em permitir tais declarações?
;
depois dela. Seria complicado para o idioma adicionar mais regras sobre quando expressões não podem ser declarações
printf()
? A instrução 5;
basicamente diz "faça o que 5
fizer (nada) e ignore o resultado. Sua instrução printf(...)
é" faça o que printf(...)
fizer e ignore os resultados (o valor de retorno de printf()
) ". C trata os mesmos. Isso também permite códigos como (void) i;
onde i
está um parâmetro para uma função que você projeta para void
marcá-lo como deliberadamente não utilizado
printf()
tem um efeito, mesmo que você ignore o valor que eventualmente retorna. Por outro lado 5;
, não tem efeito algum.