confusion sur le comportement des variables - page 4

 
wlad:
en général, j'aimerais que les développeurs fassent attention à

Qu'est-ce que les développeurs ont à voir là-dedans ? Voulez-vous qu'ils stockent votre variable sur leur serveur ? Votre ordinateur se bloque et redémarre à cause d'une panne de courant ?
 
wlad:

testez-le vous-même.

et vous verrez de quoi il s'agit.


Je compatis avec vous (((.
 

De quoi parlez-vous ?

Je n'ai pas encore obtenu de vraies réponses.

le fait est qu'il y a un problème

 
Vraiment un joint (dans la tête de quelqu'un)
 
Vinin:
Vraiment un joint (dans la tête de quelqu'un)
Expliquez-moi pourquoi cela se produit.
 
On vous l'a expliqué, mais vous ne voulez pas entendre l'opinion des autres.
 
Vinin:
On vous l'a expliqué, mais vous ne voulez pas entendre l'opinion des autres.

pourquoi

où il est dit que lorsqu'une variable externe est modifiée, la variable globale prend sa valeur

 

et ça n'arrive qu'avec des strings.

Avec les autres types, il fonctionne correctement.

dites-moi où je me trompe.

 

Voici un exemple pour comparer le comportement des chaînes de caractères et des ints.

extern string ValueString = "DDD";
extern int    ValueInt    = 10;  
     
string tempString="";
int    tempInt=0;

bool   firsttime=true;
       
int start() {
   string txt=StringConcatenate( "  ValueString: ",ValueString," < >","  tempString: ",tempString,"\n",
                                 "  ValueInt: ",   ValueInt,   " < >","  tempInt: ",tempInt,"\n",
                                 "  firsttime: ",firsttime);    
   if(firsttime) {     // значение присваевается тольо ОДИН раз   
      tempString=ValueString; 
      tempInt=ValueInt; 
      firsttime=false; 
   }

   Print(txt);
   Comment(txt);                              
}

et la sortie dans le journal :

1. charger l'EA et initialiser les variables globales

2. transfert de variables externes vers des variables globales. transfert unique implémenté via bool firsttime

3. changement des variables externes

4. La différence peut être vue ici.

tempString prend la valeur de ValueString - faux

tempInt conserve sa valeur même si ValueInt a changé - correct

5 et 6 semblables à 3 et 4


veuillez expliquer pourquoi la chaîne se comporte différemment

alors que l'Int est correct

s'il vous plaît, donnez-moi des réponses spécifiques.

 
wlad:

veuillez expliquer pourquoi la corde se comporte différemment

Même si c'est vrai.

Je demande des réponses spécifiques.

Je ne peux pas être très précis. Je n'arrive pas à trouver les liens.

J'ai vu quelque part sur le forum que lorsque le compilateur détecte des variables de type chaîne de caractères avec les mêmes valeurs, il les place dans la même mémoire réelle, et la référence à quiconque a besoin de s'y référer.

Donc, vous avez probablement raison, ils doivent être écrits dans une seule variable. En théorie, il peut s'agir d'un bug de l'optimiseur. écrivez à servicedesk, envoyez votre exemple avec le code. ils le corrigeront.

Également dupliqué ici : MetaTrader 4 Build 529 version bêta avec nouveau compilateur a été publié

--

// Mais dans mon expérience, je n'ai jamais rencontré de problème qui ne puisse être résolu.

Raison: