voici la deuxième option
il s'avère que les variables pointent vers le même emplacement mémoire après la première affectation
if(firsttime) { backup = StringVal;
J'aimerais savoir de quelle construction il s'agit.
voici un exemple
extern string StringVal = "string"; string backup = ""; bool firsttime = true; int init() { Print("========================="); Print("StringVal=",StringVal," backup=",backup); if(StringVal != backup){ if(firsttime) { backup = StringVal; Print(" First Call ===> backup = StringVal"); } Print("StringVal=",StringVal,"< > backup=",backup); } firsttime = false; } int start() { }
Si je compile comme un expert
alors quand je change la StringVal, la sauvegarde change immédiatement.
et la dernière impression ne s'appelle pas
Où est le problème ?
Eh bien, vous changez manuellement la StringVal et l'init fonctionne immédiatement, c'est vrai...
il est clair que init() fonctionne
Le problème est que 2. la variable est mise à jour indépendamment des autres conditions.
il n'y a pas de condition de mise à jour - mais la mise à jour a lieu !
Oui, c'est clair.
Le problème est que 2. la variable est définie indépendamment des autres conditions.
TOUJOURS
PROBLÈME GRAVE
Voici un exemple similaire
la valeur de la première variable est transmise à la deuxième variable une seule fois et la valeur de la deuxième variable ne doit pas changer lors de l'exécution ultérieure du programme
mais à chaque fois que la première variable est changée, la valeur de la deuxième variable change, ce qui ne devrait pas être
extern string Value = "O"; string temp_=""; bool firsttime=true; int start() { string txt=StringConcatenate( " Value: ",Value,"\n", " temp_: ",temp_,"\n", " firsttime: ",firsttime); if(firsttime) { temp_=Value; firsttime=false; } // значение присваевается тольо ОДИН раз Print(txt); Comment(txt); }
Voici un exemple similaire
la valeur de la première variable est transmise à la deuxième variable une seule fois et la valeur de la deuxième variable ne doit pas changer lors de l'exécution ultérieure du programme
mais à chaque fois que la première variable est changée, la valeur de la deuxième variable change, ce qui ne devrait pas être
Lorsque la variable externe est modifiée, l'EA est redémarrée, ce qui entraîne l'initialisation des variables, déclarées au niveau global. C'est exact. Si vous voulez éviter cela, utilisez des variables globales.
faux - pas d'initialisation du tout
Voici une preuve tirée de l'aide
Les variables globales ne sont initialisées qu'une seule fois, juste après le chargement du programme dans la mémoire du terminal client.
Et en général, il ne s'agit pas d'initialisation mais de changement de variable
Veuillez lire attentivement le code
Et le problème ne se produit qu'avec les variables de type chaîne de caractères.
Avec les autres types, pas de problème !
voici la deuxième option
il s'avère que les variables pointent vers le même emplacement mémoire après la première affectation
J'aimerais savoir de quelle construction il s'agit.
Voici un exemple
vous avez toujours la StringVal != backup et firsttime sera toujours vrai parce qu'il (init) n'est lancé qu'une seule fois mais à chaque fois que vous redémarrez l'EA et qu'un nouveau est lancé lorsque vous changez de fenêtre d'information ou lorsque vous changez de set au démarrage du terminal . Donc quand tu changesStringVal tu recommences l'init.

- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Si je compile comme un expert
alors quand je change la StringVal, la sauvegarde change immédiatement.
et la dernière impression ne s'appelle pas
Où est le problème ?