A diferença entre externo e de entrada - página 3

 
//+------------------------------------------------------------------+
//|                                                          inc.mqh |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

extern int x;

int z(){
   x=122;
   return x;

Expet:

//+------------------------------------------------------------------+
//|                                                          exp.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int x=1;

#include <inc.mqh>

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Alert(x);
   Alert(z());   
   Alert(x);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
 
Dmitry Fedoseev:

Pato, você tem uma biblioteca. Naturalmente, haverá variáveis diferentes. O que se pretende é conectar a mqh via incluir.

Em C++, as extensões são descritas apenas em bibliotecas, caso contrário o compilador não permitirá que você compile o projeto


Dmitry Fedoseev:

externo:

o inclusor será inserido no corpo do programa quando você o compilar. se você quiser descrever uma instância ali, a mesma coisa acontecerá.


alternativamente, você poderia descrever uma classe ou estrutura externa com o modificador ;)

 
Igor Makanu:

Em C++, as extensões são descritas em bibliotecas incluídas, caso contrário o compilador não permitirá que você compile o projeto.

A maneira usual de chamar uma biblioteca é usar "#include" como o nome do arquivo

 
Igor Makanu:

...

O objetivo disto é que o inclusor será inserido no corpo do programa ao compilar, se você quiser descrever uma instância ali, a mesma coisa acontecerá.

O objetivo é permitir que o arquivo linkável seja tratado independentemente de todo o projeto, para compilá-lo separadamente e assim verificar a existência de erros.

 
Dmitry Fedoseev:

O objetivo é poder trabalhar em um arquivo plug-in independentemente de todo o projeto, compilá-lo separadamente e assim verificar a existência de erros.

Acho que estamos procurando o ponto em que ele simplesmente não está lá.

o externo foi mantido para compatibilidade com milhares de códigos escritos anteriormente e a ajuda foi escrita por um cara que copiou algumas das informações do wiki.

 
Igor Makanu:

Acho que estamos procurando um significado onde não existe nenhum.

imho, o exterior foi retido para compatibilidade de milhares de códigos escritos anteriormente, e a ajuda foi escrita por uma pessoa que copiou algumas das informações do wiki

Qual é o veredicto, senhores?) Se eu escrever um programa .mq5 com .mqh (#incluir), posso escrever com segurança externamente e não ter medo de consequências inesperadas (como fiz no mql4) ou usar entrada ?
 
Maksim Neimerik:
Então, qual é o veredicto dos Senhores?) Se eu escrever um programa .mq5 com .mqh (#incluir), posso escrever com segurança externamente e não ter medo de consequências inesperadas (como fiz no mql4) ou usar entrada ?

Depende de quais propósitos. Eles têm propósitos diferentes.

 
Maksim Neimerik:
Então, qual é o veredicto, cavalheiros)? Se eu escrever um programa .mq5 com .mqh (#incluir), posso escrever com segurança externamente e não ter medo de consequências inesperadas (como fiz no mql4) ou ainda devo usar o input ?

use as construções padrão do programa MQL: todas as entradas no início do código, depois todas incluem. É assim que os exemplos são escritos e 99% do código no codobase, e você não terá nenhuma surpresa.

Mais uma vez sobre externo - eles podem ser alterados durante a execução do programa, mas na minha opinião é má prática, geralmente todas as variáveis externas no OnInit () são copiadas em suas variáveis e depois trabalham com elas (como um exemplo de especialistas que trabalham com 4 e 5 caracteres - exemplos deste projeto na rede toneladas)


E o resultado final - não use código externo, se você modificar código antigo, substitua-o por input e o compilador o ajudará com avisos se houvesse um registro no externo - você deve consertá-lo

 

A propósito, descobri que o compilador não se importa que eu possa reprogramar o conteúdo da enumeração como uma variável

enum mode5
{
   Manual         = 0,// Standard in Pips
   Kijun_sen      = 1 // Stoploss +/- Kijun-sen
};

//а потом где угодно можно объявить и компилятору будет пофиг

string Kijun_sen ="Да мне вообще пофиг что ты там объявил";      
 
Aleksey Semenov:

A propósito, descobri que o compilador não se importa que eu possa reprogramar o conteúdo da enumeração como uma variável

e se eu declarar uma variável enumerativa?

enum mode5
{
   Manual         = 0,// Standard in Pips
   Kijun_sen      = 1 // Stoploss +/- Kijun-sen
};


string Kijun_sen ="Да мне вообще пофиг что ты там объявил"; 

void OnStart()
  {
      mode5 x = Kijun_sen;
   
  }
//+------------------------------------------------------------------+

conversão enum implícita tst1.mq5 24 17


você também pode verificar EnumToString()


Acho que o tipo sem as variáveis declaradas foi simplesmente descartado da compilação por não ter sido utilizado

Razão: