Erreurs, bugs, questions - page 2865
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Fonctionne de haut en bas comme un remplacement de texte. C'est-à-dire que "TMP" sera remplacé par "VALUE".
Ce n'est pas un compilateur - c'est un préprocesseur)
se transforme en
et la VALEUR n'est pas définie.
Comment undef est censé fonctionner ?
Comment undef est censé fonctionner ?
Jusqu'à ce point, il y a un "remplacement de texte" en cours.
Ce n'est pas un compilateur - c'est un préprocesseur)
se transforme en
et la VALEUR est indéfinie.
Si je comprends bien, le type de valeur VALUE*2 est const et est lié à la substitution elle-même, c'est-à-dire que la VALUE est également une constante. Le compilateur crée deux constantes.
Si c'est le cas, il doit créer une nouvelle substitution.
#define VALUE VALUE1
Et ce n'est pas correct si la VALEUR au-dessus du code a été définie comme une constante.
Jusqu'à ce stade, il s'agit d'un "remplacement de texte".
Ne correspond pas, change TMP enVALUE dans la ligne "#define VALUE (TMP*2)" qui est après.
Cela ne colle pas, change TMP enVALUE dans la ligne "#define VALUE (TMP*2)" qui est après.
Et ainsi les substitutions se poursuivent jusqu'à la fin.
Il y a un code :
La première substitution change la VALEUR en 10 dans tout le code jusqu'à #undef VALEUR, laissant ceci :
La substitution suivante fait passer le TMP à 10. Il s'avère que
Où est-ce que je me trompe ?
Il y a un code :
La première substitution change la VALEUR en 10 dans tout le code jusqu'à #undef VALEUR, laissant ceci :
La substitution suivante fait passer le TMP à 10. Il s'avère que
Qu'est-ce que je fais de mal ?
Ce n'est pas 10 qui est substitué à TMP, c'est la VALEUR, mais si la VALEUR est définie (ce qui est casse-gueule), c'est 10.
Regardez ça étape par étape :
Le préprocesseur insère fidèlement Print
et ensuite, toujours sans artifice, substitue quoi ? Bien :
et ensuite il efface toutes les directives du préprocesseur et seulement après cela le compilateur obtient ceci :
TMP n'est pas 10, mais VALUE est substitué à TMP, et ensuite si VALUE est défini (ce qui est un problème), il est 10
Regardez ça étape par étape :
Le préprocesseur insère fidèlement Print
et ensuite, toujours sans artifice, substitue quoi ? Bien :
et ensuite il efface toutes les directives du préprocesseur et seulement après cela le compilateur obtient ceci :
Cela ne s'appelle pas "top-down".
On ne dit pas que c'est du haut vers le bas.
Désolé, je me suis embrouillé en essayant de m'expliquer))))
Encore une fois :
Au moment de la deuxième définition de VALEUR, la macro VALEUR n'est pas définie, et VALEUR est donc définie comme suit
(VALUE*2)
parce que le TMP était et est toujours défini par la VALEUR.
Mais le TMP, après la deuxième définition de la VALEUR, est étendu à
(TMP*2)
(Quelque chose comme ça))
Le préprocesseur ne fait que remplir ce qu'il a et peu importe comment et où il est défini. C'est pourquoi vous devez être prudent avec elle. Exemple :
et ajoutons maintenant une chose maléfique à la fonction, à savoir un effet secondaire
Et ce n'est qu'une inscription, mais que faire si le dépôt dépend de cette fonction ?
Tout est possible, seule une macro doit être ajoutée
Résultat : 20