Pourquoi ce programme ci-dessous ne montre aucune erreur?
int main (void) {
"ANGUS";
1;
3.14;
return 0;
}
Pourquoi ce programme ci-dessous ne montre aucune erreur?
int main (void) {
"ANGUS";
1;
3.14;
return 0;
}
Chacun de ces états sont des expressions qui correspondent à une valeur, qui est ensuite défaussée. Le comparer à si vous appelez une fonction qui a renvoyé un int, un char ou un flotteur, sans l'aide de la valeur de retour. C'est aussi une expression qui renvoie une valeur.
Il n'est pas rare d'avoir des fonctions qui renvoient des valeurs que l'appelant peut ou peut ne pas être intéressé par comme, par exemple, où l' printf("%d", 9001)
renvoie le nombre de caractères imprimés. Un appelant peut utiliser le nombre retourné, ou ils peuvent simplement l'ignorer.
Si le compilateur se plaint à chaque fois que vous avez ignoré une valeur de retour, vous aurez un très très bruyant journal de génération. Certains compilateurs cependant diagnostiquer (si un nombre suffisant de signaux d'alarme sont activés) tels inutile effets secondaires moins utilise des constantes et des variables.
Il est parfaitement valable pour une instruction C juste une valeur qui est rejeté. La plupart des gens ne se rendent pas compte que c'est exactement ce qui se passe quand on code en place des choses comme:
x++;
printf ("Hello, world\n");
L'ancien est en fait une expression qui arrive juste pour avoir les effets secondaires de l'incrémentation de la variable après "le retour" à elle.
Le dernier appel de la fonction renvoie en fait une valeur (le nombre de caractères imprimés) qui est également ignoré.
À partir d'un certain point de vue, qui n'est pas différent de ces déclarations:
42;
3 * 12;
autre que le fait qu'ils n'ont pas d'effets secondaires qui les rendent utiles.
En fait, même x = 1
est une expression dont le résultat est ignoré. C'est ce qui rend x = y = z = 0
possible, car c'est effectivement:
(x = (y = (z = 1)));
Tout cela est détaillé dans C99, section 6.8.3 Expression and null statements
qui dit, en partie:
L'expression dans une expression instruction est évalué comme un vide, l'expression de son côté effets, tels que les affectations et les appels de fonction qui ont des effets secondaires.
Pourquoi devrait-il? Les trois premières lignes de votre main ne font rien et renvoient 0; est une expression valide.
Si vous utilisez gcc pour compiler le programme, essayez d'activer tous les avertissements (avec le paramètre -Wall). Cela afficherait warning: statement with no effect [-Wunused-value]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.