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 5fait (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ù iest un paramètre à une fonction que vous transformez pour voidle 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.