Pardonnez si cette question est naïve. Considérez le programme suivant:
#include <stdio.h>
int main() {
int i = 1;
i = i + 2;
5;
i;
printf("i: %d\n", i);
}
Dans l'exemple ci-dessus, les instructions 5;
et i;
semblent totalement superflues, mais le code se compile sans avertissement ni erreur par défaut (cependant, gcc envoie un warning: statement with no effect [-Wunused-value]
avertissement lorsqu'il est exécuté avec -Wall
). Ils n'ont aucun effet sur le reste du programme, alors pourquoi sont-ils considérés comme des déclarations valables en premier lieu? Le compilateur les ignore-t-il simplement? Y a-t-il des avantages à autoriser de telles déclarations?
;
après. Cela compliquerait le langage d'ajouter plus de règles sur le moment où les expressions ne peuvent pas être des déclarations
printf()
? L'instruction 5;
dit essentiellement "faire tout ce qui 5
fait (rien) et ignorer le résultat. Votre instruction printf(...)
est" faire tout ce qui printf(...)
fait et ignorer les résultats (la valeur de retour de printf()
) ". C les traite de la même manière. Cela permet également d'utiliser du code tel que (void) i;
où i
est un paramètre à une fonction que vous transformez pour void
le marquer comme délibérément inutilisé
printf()
a un effet, même si vous ignorez la valeur qu'il retourne finalement. En revanche, 5;
n'a aucun effet.