Pergunta

Eu sou muito positivo sobre isso, mas apenas para estar no lado seguro:

Será que a garantia padrão C que e correntes (A && B && ...) serão avaliadas da esquerda para a direita, e que a avaliação vai parar logo que há um 0?

Mesma pergunta para OR. (Assim que há uma 1)

contagem Can I sobre isso para outros idiomas além de estilo C?

É seguro código:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}
Foi útil?

Solução

Sim, é garantido para C, C ++ e C #. O mesmo vale para o Delphi com "avaliação curcuit curta" habilitado.

Este é um comportamento numerosas linhas de código dependem para este momento.

Outras dicas

Sim, ele é padronizado por ambos C e C ++.

Sim, as suas suposições sobre a ordem das operações em C estão corretas e o trecho de código irá funcionar como pretendido. Gostaria de ter outras línguas "de estilo C" numa base caso-a-caso.

Sim, é verdade.

Eu tenho visto pessoas que pensavam que era claro, e substituir && com esta forma:

if (a)
if (b)
if (c)
if (d) {
}

Pessoalmente, penso que é meio feio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top