La différence entre extern et input - page 2

 
Artyom Trishkin:

Tout est clair en ce qui concerne les entrées. Le truc avec extern - là, comme il me semble, vous pouvez d'abord déclarer des variables avec le même type et identifiant dans différents fichiers à attacher au projet, et ensuite il s'avère que vous ne pouvez pas les déclarer de cette façon. Bien sûr, c'est un impressionnisme à trois étages...

La signification d'extern est que si le fichier principal (principal) a une certaine variable et un autre fichier est attaché à ce fichier. Et dans ce fichier joint nous devons utiliser la variable déclarée dans le fichier principal, puis dans le fichier joint nous la déclarons comme extern. En conséquence, le fichier lié peut être compilé et lorsque le fichier principal est compilé, ladéclaration de variable dans le fichier lié est ignorée.

 
Alexey Viktorov:

Je ne sais pas. Pour moi, toute la documentation est auto-explicative. S'il y a des difficultés quelque part, elles disparaissent après quelques expérimentations.

Mais si je ne connais pas les opérations sur les bits, je peux lire n'importe quel article... Je ne comprendrai pas un mot de tout ça. Tout comme je ne comprenais rien aux drapeaux et aux ensembles de drapeaux jusqu'à ce qu'Artem me les explique de vive voix.

C'est compréhensible si vous en exigez des valeurs, mais comment tout cela fonctionne avant et après - les ténèbres les plus sombres

 
Fast235:

il est compréhensible que l'on en exige de la valeur, mais la façon dont tout cela fonctionne avant et après est obscure, l'obscurité la plus totale.

Qui est-elle ?

 
Alexey Viktorov:

Qui est-elle ?

l'essence du métier

 
Alena Lysenkova:

il y a :
1) extern ne fonctionne que dans mql4.
2) les commentaires après la saisie seront affichés dans les paramètres de saisie au lieu du nom de la variable de saisie.
entrée int ma_period = 20 ;
- il dira "ma_période".
entrée int ma_period = 20 ; // période MA
- il sera écrit "période MA".
pour être exactement comme cela dans mql4, le mode de compilation strict est nécessaire #property strict.
Cette astuce est absente avec extern.
3) Les variables externes peuvent être modifiées dans le code comme toutes les variables globales, les variables d'entrée ne le peuvent pas.

Au départ, il n'y avait que mql4 et extern, aucune entrée n'était présente, pas plus que OOP dans mql4.
Puis mql5 a été créé et l'entrée a été immédiatement incluse parce que mql5 en général était orienté exactement vers la POO.
Il y a environ 2-3 ans, mql4 a été mis à jour avec de nombreuses fonctionnalités de mql5, y compris l'entrée.

Sur quel terminal écrivez-vous ?

Dans MT5, si vous déclarez une variable externe comme extern dans l'indicateur, l'indicateur peut ne pas pouvoir être appelé via iCustom().

 
Dmitry Fedoseev:

Sur quel terminal écrivez-vous ?

Dans MT5, si vous déclarez une variable externe comme extern dans un indicateur, l'indicateur peut ne pas pouvoir être appelé par iCustom().

Je ne fais pas de reproches maintenant, mais vous écrivez "il peut échouer"... il s'avère que cela peut ou ne peut pas fonctionner ! Je veux dire, il est difficile pour moi, en tant qu'autodidacte sans éducation spéciale, de comprendre une telle incertitude...

 
Alena Lysenkova:

il y en a :
1) extern ne fonctionne que dans mql4.
2) les commentaires après la saisie apparaîtront dans les paramètres de saisie au lieu du nom de la variable de saisie.
entrée int ma_period = 20 ;
- il dira "ma_période".
entrée int ma_period = 20 ; // période MA
- il sera écrit "période MA".
pour être exactement comme cela dans mql4, le mode de compilation strict est nécessaire #property strict.
Cette astuce est absente avec extern.
3) Les variables externes peuvent être modifiées dans le code comme toutes les variables globales, les variables d'entrée ne le peuvent pas.

Au départ, il n'y avait que mql4 et extern, aucune entrée n'était présente, pas plus que OOP dans mql4.
Puis mql5 a été développé et a immédiatement inclus l'entrée parce que mql5 en général était orienté OOP.
Il y a environ 2-3 ans, mql4 a été mis à jour avec de nombreuses fonctionnalités de mql5, y compris l'entrée.

extern fonctionne dans les deux cas. Il en va de même pour les entrées dans MQL5 et MQL4. Leur but est différent, et c'est écrit dans l'aide.

Pourquoi orienter directement une personne vers une idée fausse sur le but des variables d'entrée et externes ?

 
Dmitry Fedoseev:

La signification d'extern est que si le fichier principal (principal) a une certaine variable et un autre fichier est attaché à ce fichier. Et dans ce fichier joint nous devons utiliser la variable déclarée dans le fichier principal, puis dans le fichier joint nous la déclarons comme extern. Par conséquent, le fichier lié peut être compilé, mais lorsque vous compilez le fichier principal, la déclaration de variable dans le fichier lié est ignorée.

Je pensais également que ce modificateur fonctionne comme en C++, c'est-à-dire qu'il est déclaré dans le fichier includehttps://www.mql5.com/ru/forum/160683/page867#comment_11927748.

Vérifié, il ne fonctionne pas comme il le devrait en C++.


fichier de la bibliothèque tstextern

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
extern int koef=1 ;
 int MyCalculator(int value,int value2) export
   {
    return((value+value2)*koef);
   }
//+------------------------------------------------------------------+

fichier de script :

#import "tstextern.ex5"
int MyCalculator(int value,int value2);
#import

extern int koef;

void OnStart()
  {
      koef = 666;
      int res = MyCalculator(100,200);
      Print("result = ",res);
   
  }
//+------------------------------------------------------------------+

toute manipulation de la variablekoef ne faitrien, elle est toujours dans la portée locale (à l'intérieur de chaque fichier)


Artyom Trishkin:

Leur but est différent et c'est écrit dans l'aide.

La différence réside dans le contrôle d'accès :

entrée - elle ne peut être que lue, l'écriture est interdite.

extern - il peut être lu et écrit, et après la réinitialisation du programme MQL cette valeur sera restaurée à la valeur spécifiée dans les paramètres externes

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.06.02
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Maksim Neimerik:

Je ne suis pas négatif maintenant, mais vous écrivez "ça pourrait ne pas marcher"... ça peut ne pas marcher, mais ça peut marcher ! Je veux dire, il est difficile pour moi, en tant qu'autodidacte sans éducation spéciale, de comprendre une telle incertitude...

Je veux dire, je n'ai pas vérifié pour le moment. Et il est dangereux de dire ce qui était là autrefois, car les choses changent si souvent. C'était peut-être un problème temporaire.

 
Igor Makanu:

Je pense également que ce modificateur fonctionne comme en C++, c'est-à-dire qu'il est déclaré dans le fichier du pluginhttps://www.mql5.com/ru/forum/160683/page867#comment_11927748.

il ne fonctionne pas comme il le devrait en C++.


fichier de la bibliothèque tstextern

fichier de script :

toute manipulation de la variablekoef ne fait rien, elle est toujours dans la portée locale (à l'intérieur de chaque fichier)

Eh bien, vous avez une bibliothèque. Bien sûr, il y aura différentes variables. Il s'agit de la connexion de mqh via include.