C prioridades

yb_psyco

Power Member
Tenho uma dúvida neste if

Código:
        int x = 0;
        if ( ! x ++)
        {
              // qualquer coisa
        }

O que acontece neste caso?
O conteúdo do if é executado?
 
Última edição pelo moderador:
Segundo um teste que eu fiz sim, mas não sei explicar porquê. Aqui está o programa que usei para o teste:

main()
{
int x = 0;
if(!x++)
printf("ya.\n");
else
printf("Não.\n");
getchar();
}
 
Tenho uma dúvida neste if

Código:
        int x = 0;
        if ( ! x ++)
        {
              // qualquer coisa
        }

O que acontece neste caso?
O conteúdo do if é executado?


Bem, se estou a pensar bem, o programa executa o conteudo do if sempre, pois x++ não é nenhuma condiçao, se retirares a negação o programa executa o conteudo do if na mesma....
Isto sou eu a supor:D
 
Obrigado xD

De facto não percebo também o porquê.
Visto que o operador ++ é mais prioritário que o !

Edit: Obg ensiferum Já andava esquecido dos incrementos da esquerda e da direita da variável
 
Última edição:
Acho que, traduzindo por miudos é:

se o x não for incrementado entra no if

!x++ - neste caso entrou porque só depois do x é que ele incrementa a variável.

!++x - neste caso não entrou porque antes do x aparecer é que ele é incrementa

é confuso mas acho que é a resposta.
 
Quando a condição é testada o x ainda tem o valor 0, isto é, o teste que é realizado é equivalente a:
Código:
int x = 0;
if (!x)

Só depois desta condição ser testada é que o x é incrementado (x++).
 
Quando a condição é testada o x ainda tem o valor 0, isto é, o teste que é realizado é equivalente a:
Código:
int x = 0;
if (!x)
Só depois desta condição ser testada é que o x é incrementado (x++).

E tudo isto por o ++ estar antes ou depois, ainda me lembro da minha professora de prog nos dizer isto, e causa muita confusão.
 
Por causa de estar depois. Se estivesse antes, a primeira operação que ocorria era o incremento, ficando x com o valor 1, sendo depois feito o teste if (!x).
 
Back
Topo