Principalement parce que les expressions en C donnent également des valeurs. Par exemple: x = 1;
donne la valeur 1. Parfois, vous l'utilisez pour plusieurs affectations comme x = y = 1;
, mais le plus souvent vous ne l'utilisez pas.
Au début C, le type void
de retour n'a pas été inventé non plus, donc chaque fonction retourne une valeur, que ce soit généralement utile ou non (par exemple, votre appel à printf
renvoie également une valeur). Les règles du langage ne font pas de cette erreur une erreur (cela pourrait perdre la compatibilité avec le code virtuellement existant) et puisque cela est commun et indique rarement un problème, la plupart des compilateurs ne l'avertissent pas non plus. Quelques outils de charpie, ce qui a conduit quelques programmeurs malavisés à écrire des choses comme (void)printf("whatever");
(c.-à-d., En renvoyant le retour inutilisé à void
pour signaler que c'était vraiment, vraiment intentionnel quand il a été ignoré. et fait souvent un peu de mal, donc (heureusement) il est rarement vu
Notez également qu'un bon compilateur génère rnings * (!!) si vous avez fait cela, pour stocker une valeur dans une variable et ne plus jamais la lire après. C'est une indication beaucoup plus probable d'une erreur de programmation. –