ID do artigo: 000073768 Tipo de conteúdo: Solução de problemas Última revisão: 14/09/2011

Resultados incorretos de operação lógica ou condicional com efeitos colaterais

Ambiente

  • Intel® Quartus® II Subscription Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    Problema crítico

    Descrição

    O compilador C2H sempre avalia ambos os operands de lógica (&&, ||) e condicional (?:) Operadores. Isso é diferente dos padrões nacionais americanos esperados Comportamento do Instituto (ANSI) C, em que os operands são avaliados da esquerda para a direita, e os operands desnecessários são ignorados.

    Por exemplo, na expressão (i-- && j--), se o valor for i zero, a ANSI C não avaliará a expressão do lado direito (RHS) e j não é Diminuída. Em contraste, o compilador C2H avalia ambos os lados, decrementação j.

    As seguintes expressões são outros exemplos que podem ser afetados por este problema:

    if (i-- || j ) ...; a = ((cond == 1)? i : j );
    Resolução

    Use operações lógicas e condicionais cujos operadores têm sem efeitos colaterais. Operações com efeitos colaterais incluem pré e pós- operações de incremento e decremento ( , ), -- operações de memória (*, []., ->), e chamadas de função.

    Produtos relacionados

    Este artigo aplica-se a 1 produtos

    Dispositivos programáveis Intel®

    O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.