Errores, fallos, preguntas - página 265

 
Voodoo_King:

y no me pidas que escriba más detalles al helpdesk. esta situación podría y debería haberse detectado antes de que se lanzara la build. tienes pinchazo tras pinchazo en las zonas principales.

Joven, si supieras el rastrillo que ha pisado la gente aquí...

En segundo lugar, los promotores no venden en la vida real.


Así que limpia la baba, escribe una aplicación (en la aplicación puedes regañar a los desarrolladores por ser tan malos).

Pero hay que hacer algo.

 
Gracias, lo investigaremos.
 

Me gustaría preguntar (por alguna razón no he encontrado este problema antes)...

¿Este tipo de construcción depende enteramente del programador (hacer un bucle cuando un número sin signo se desborda)?

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

¿O se puede arreglar en el compilador?

 
AlexSTAL:

Me gustaría preguntar (por alguna razón no he encontrado este problema antes)...

¿Una construcción de este tipo recae por completo en el programador (hacer un bucle cuando un número sin signo se desborda)?

¿O se puede ajustar en el compilador?


Recae por completo en el programador.

Lo máximo que se puede hacer en el compilador es una advertencia.

 
stringo:

Esto depende totalmente del programador.

Lo máximo que se puede hacer en un compilador es una advertencia.

Bueno, una advertencia no estaría de más, por favor, hazlo.
 
AlexSTAL:
Bueno, una advertencia no estaría de más, por favor, hazlo.

hecho

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:

hecho

Lo siento... No entiendo...

¿Qué tiene que ver LastBarInd con restar uno de cero para un número sin signo en un bucle?

Uchar  i >= 0; i--
 
AlexSTAL:

Lo siento... No entiendo...

¿Qué tiene que ver LastBarInd con restar uno de cero para un número sin signo en el bucle?


¿Y quieres que el compilador calcule de antemano todos los posibles valores que puede tomar la variable i y te dé un aviso?

SZZ El compilador ya tiene mucho trabajo, así que tiene que vigilar los errores del programador.

Es probable que se produzca un error en tiempo de ejecución.

 
AlexSTAL:

Lo siento... No entiendo...

¿Qué tiene que ver LastBarInd con restar uno de cero para un número sin signo en el bucle?


El problema con el bucle no es la forma en que se cambia (a menos que, por supuesto, se cambie a cero), es comprobar el valor de esa variable, que nunca será menor que cero.

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

¿Quieres que el compilador calcule de antemano los valores que puede tomar la variable i y te dé un aviso?

SZZ El compilador ya tiene mucho trabajo, así que tiene que vigilar los errores del programador.

ZS El error probablemente se producirá, pero en tiempo de ejecución.

No... Me refería a un caso especial cuando:

1) El tipo de la variable i es sin signo.

2) Una constante explícita

i >= 0

3) la sustracción

i--
Razón de la queja: