ET / OU chaînes en C
-
13-09-2019 - |
Question
Je suis à peu près positif à ce sujet, mais juste pour être du bon côté:
Est-ce que la garantie C standard et les chaînes que (A && B && ...) seront évalués de gauche à droite, et que l'évaluation s'arrêtera dès qu'il ya un 0?
Même question pour OU. (Dès qu'il ya un 1)
Puis-je compter sur cela pour d'autres langues de style C?
Est-ce sécuritaire code:
if (somePtr!=NULL && somePtr->someMember==123)
{
...
}
La solution
Oui, il est garanti pour C, C ++ et C #. La même chose vaut pour Delphi avec « courte évaluation curcuit » activée.
Ce comportement de nombreuses lignes de code comptent pour ce moment.
Autres conseils
Oui, il est normalisé à la fois par C et C ++.
Oui, vos hypothèses sur l'ordre des opérations en C sont correctes et l'extrait de code fonctionnera comme prévu. Je prendrais d'autres langues « style C » au cas par cas.
Oui, il le fait.
J'ai vu des gens qui pensaient que était peu claire, et remplacé && 's avec ce formulaire:
if (a)
if (b)
if (c)
if (d) {
}
Personnellement, je pense que c'est un peu laid.