Erros, bugs, perguntas - página 265

 
Voodoo_King:

e não me peça para escrever mais detalhes para o helpdesk. esta situação poderia e deveria ter sido apanhada antes de a construção ter sido libertada. tem furos após furos nas áreas principais.

Jovem, se soubesse o que as pessoas aqui pisaram...

Em segundo lugar, os Desenvolvedores não vendem na vida real.


Portanto, limpe a baba, escreva uma aplicação (na aplicação pode repreender os criadores por serem tão maus).

Mas algo tem de ser feito.

 
Obrigado, vamos analisar o assunto.
 

Gostaria de perguntar (nunca tinha encontrado este problema antes por alguma razão)...

Este tipo de construção está inteiramente a cargo do programador (looping quando um número não assinado transborda)?

   uchar LastBarInd = 2;
   for (uchar i = LastBarInd; i >= 0; i--)
     {
      ................. // тело
     }

Ou pode ser fixado no compilador?

 
AlexSTAL:

Gostaria de perguntar (nunca tinha encontrado este problema antes por alguma razão)...

Uma construção deste tipo cai inteiramente sobre o programador (looping quando um número não assinado transborda)?

Ou pode ser afinado no compilador?


Cai inteiramente sobre o programador.

O máximo que pode ser feito no compilador é um aviso.

 
stringo:

Isto é inteiramente da responsabilidade do programador.

O máximo que se pode fazer num compilador é um aviso.

Bem, um aviso não faria mal, por favor faça.
 
AlexSTAL:
Bem, um aviso não faria mal, por favor faça.

feito

void OnStart()
  {
   uchar LastBarInd;
   Print(LastBarInd>=0);
   Print(LastBarInd<0);
  }

// expression is always true    1.mq5   4       20
// expression is always false   1.mq5   5       20
 
mql5:

feito

Desculpe... Eu não entendo...

O que tem a LastBarInd a ver com a subtracção de um de zero para um número não assinado no laço?

Uchar  i >= 0; i--
 
AlexSTAL:

Desculpe... Eu não entendo...

O que tem a LastBarInd a ver com a subtracção de um de zero para um número não assinado no laço?


E quer que o compilador calcule antecipadamente todos os valores possíveis que a variável i pode tomar e lhe dê um aviso?

SZZ O compilador já tem muito trabalho a fazer, por isso tem de estar atento aos erros do programador.

Haverá provavelmente um erro no momento da execução.

 
AlexSTAL:

Desculpe... Eu não entendo...

O que tem a LastBarInd a ver com a subtracção de um de zero para um número não assinado no laço?


O problema com o looping não é a forma como é alterado (a menos, claro, que seja alterado para zero), é verificar o valor dessa variável, que nunca será inferior a zero.

void OnStart()
  {
   uchar v;
   Print(v>=0);
   Print(v<0);
  }
 
Urain:

Quer que o compilador calcule antecipadamente os valores que a variável i pode tomar e lhe dê um aviso?

SZZ O compilador já tem muito trabalho a fazer, por isso tem de estar atento aos erros do programador.

ZS O erro irá provavelmente ocorrer, mas em tempo de execução.

Não... Referia-me a um caso especial quando:

1) O tipo de variável i não está assinado.

2) Uma constante explícita

i >= 0

3) subtracção

i--
Razão: