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)
{
     ...
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top