Erreurs, bugs, questions - page 265

 
Voodoo_King:

et ne me demandez pas d'écrire plus de détails au helpdesk. cette situation aurait pu et aurait dû être prise en compte avant la sortie de la build. vous avez crevaison après crevaison dans les zones principales.

Jeune homme, si vous saviez sur quel râteau les gens ici ont marché...

Deuxièmement, les promoteurs ne vendent pas dans la vie réelle.


Alors essuyez la bave, écrivez une application (dans l'application, vous pourrez gronder les développeurs pour avoir été si mauvais).

Mais il faut faire quelque chose.

 
Merci, nous allons nous en occuper.
 

Je voudrais demander (je n'ai pas rencontré ce problème auparavant pour une raison quelconque)...

Ce type de construction dépend-il entièrement du programmeur (boucler lorsqu'un nombre non signé déborde) ?

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

Ou cela peut-il être corrigé dans le compilateur ?

 
AlexSTAL:

Je voudrais demander (je n'ai pas rencontré ce problème avant pour une raison quelconque)...

Une construction de ce type incombe-t-elle entièrement au programmeur (boucler lorsqu'un nombre non signé déborde) ?

Ou peut-on le modifier dans le compilateur ?


Elle incombe entièrement au programmeur.

Le plus que l'on puisse faire dans le compilateur est un avertissement.

 
stringo:

Cela dépend entièrement du programmeur.

Le plus que l'on puisse faire dans un compilateur est un avertissement.

Un avertissement ne ferait pas de mal, faites-le.
 
AlexSTAL:
Un avertissement ne ferait pas de mal, faites-le.

sur

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:

sur

Désolé... Je ne comprends pas...

Quel est le rapport entre LastBarInd et la soustraction de un à zéro pour un nombre non signé dans une boucle ?

Uchar  i >= 0; i--
 
AlexSTAL:

Désolé... Je ne comprends pas...

Quel est le rapport entre LastBarInd et la soustraction de un à zéro pour un nombre non signé dans la boucle ?


Et vous voulez que le compilateur calcule à l'avance toutes les valeurs possibles que la variable i peut prendre et vous donne un avertissement ?

SZZ Le compilateur a déjà beaucoup de travail à faire, il doit donc surveiller les erreurs du programmeur.

Il y aura probablement une erreur au moment de l'exécution.

 
AlexSTAL:

Désolé... Je ne comprends pas...

Quel est le rapport entre LastBarInd et la soustraction de un à zéro pour un nombre non signé dans la boucle ?


Le problème de la boucle n'est pas la façon dont elle est modifiée (à moins bien sûr qu'elle ne soit changée en zéro), c'est la vérification de la valeur de cette variable, qui ne sera jamais inférieure à zéro.

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

Voulez-vous que le compilateur calcule à l'avance les valeurs que la variable i peut prendre et vous donne un avertissement ?

SZZ Le compilateur a déjà beaucoup de travail à faire, il doit donc surveiller les erreurs du programmeur.

ZS L'erreur se produira probablement, mais au moment de l'exécution.

Non... Je parlais d'un cas spécial où :

1) Le type de la variable i est non signé.

2) Une constante explicite

i >= 0

3) soustraction

i--
Raison: