Ir para o conteúdo
pmg

Micro puzzle

Mensagens Recomendadas

pmg    102
pmg

Estava a escrever um código e a certa altura escrevi isto

   if (--x) --x; /* explicação da expressão */

No código real a variável tem outro nome e o comentário é mais explícito, mas como é uma construção nova para mim achei que só o nome da variável não chegava para eu me lembrar da razão da expressão.

Puzzle: o que é que que pretendo com esta instrução?

Ou, por outras palavras, o que é que o comentário real tem?

PS Qual a versão mais bonita

if (--x) --x;

if (--x) x--;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
softklin    12
softklin

Eu acho que depende do valor do i. Se o valor do i for 1, então ele vai ficar a 0, porque na expressão --i é decrementado de 1 para 0; depois é feito o if sobre um valor 0, e dará falso (não estou certo se será sobre o resultado da operação, ou mesmo sobre o valor 0).

Será que o código serve para não deixar passar valores negativos (embora isto só funcione se passasse um número maior que 0...) ?

Mantém-nos informados pmg!  :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Puzzle resolvido por softclean :)

Usar if (--x) --x; ou if (--x) x--; é igual para os efeitos pretendidos.

Quanto à velocidade de cada um, acho que o compilador sabe melhor que eu o que fazer e que cria instruções iguais para as duas expressões. Mesmo que não o faça a diferença é certamente negligível.

O código faz parte do controle dum loop em que eu quero andar "para trás" de 2 em 2, mas sem passar o zero.

size_t x = strlen(src);
while (x) {
  /* código */
  if (--x) --x;
}

http://www.portugal-a-programar.pt/index.php?showtopic=23489

Ao correr uma versão anterior do código ele deu-me um erro estúpido, porque o x "ultrapassou" o zero ficando com 4294967295!

A versão actual do meu código já foi evoluindo e, embora já não seja necessário, ainda lá tem o if (--x) --x; :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade