Curiosidade sobre a sintaxe do MetaQuotes

 

Forunistas,


Em uma parte do código, tinha-se


int OnCalculate(Parametros)
{
//...
 const int lapsoVela = PeriodSeconds(Period()); //pau --> Compilador acusa 'lapsoVela' - local variables cannot be used  

const static int lapsoVela = PeriodSeconds(Period()); //Ok adicionando a palavra-chave static 
//...
 static datetime tempao =(TimeCurrent())% (datetime )lapsoVela; //Causa do erro

//..
}

Qual é a diferença feita pelo static? Static só pode inicializar static? Se sim, por qual razão?

 
AnarcoPhysic:

Forunistas,


Em uma parte do código, tinha-se


Qual é a diferença feita pelo static? Static só pode inicializar static? Se sim, por qual razão?

oir que vc está usando CONST ??
 
Minions Labs:
oir que vc está usando CONST ??

lapsoVela é uma variável constante. Uma vez inicializada não muda de valor. Imagino que, isso, pode trazer benefício ao código, abrir possibilidade de otimização para o compilador. me engano?

 
AnarcoPhysic:

lapsoVela é uma variável constante. Uma vez inicializada não muda de valor. Imagino que, isso, pode trazer benefício ao código, abrir possibilidade de otimização para o compilador. me engano?

Você já experimentou recompilar sem o CONST?

Uma coisa é ter um valor constante durante a COMPILAÇÃO, outra é atribuir a uma variável, em RUNTIME, com valores que somente serão conhecidos em RUNTIME. Acho que você está misturando completamente as coisas...

A suposta COMPILA"CÃO de código do MQL5 (há divergências de opiniões de como isso acontece, mas vamos assumir que é PURA COMPILAÇÃO), não pode ter valores atribu';idos em tempo de RUNTIME. Não faz sentido.


;)

Razão: