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®

1

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 governará e será a controle. Exibir a versão em inglês desta página.