Problema crítico
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 );
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.