Erros, bugs, perguntas - página 2332

 
Vladimir Pastushak:

De acordo com a ajuda, deve retornar falso se o ficheiro não existir.

A rigor, não decorre da documentação que o resultado de FileGetInteger(FileName,FILE_EXISTS) seja necessariamente um bool

Mas a lógica é ornamentada em qualquer caso

https://www.mql5.com/ru/forum/1111/page1788#comment_4071879

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.02.08
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

O motor do sítio não destaca a macro a vermelho.

 
Vladimir Pastushak:

bool file_exists=(bool)FileGetInteger(FileName,FILE_EXISTS);

Em qualquer caso, retorna verdadeiro se houver ficheiro ou não, e erro 5019 se não houver ficheiro. De acordo com a ajuda, deve retornar falso se não houver ficheiro.

bool file_exists=FileIsExist(FileName); Funciona correctamente

A forma correcta seria

bool file_exists=FileGetInteger(FileName,FILE_EXISTS)==1; 
 
Vladimir Pastushak:

Consegui-o no mt 5

Favor fornecer o código a estudar, via PM

 
fxsaber:

O motor do site não destaca a macro a vermelho.

Só deve ser realçado a vermelho se a macro tiver sido previamente definida

#define  PRICEST_TICK_PRICE bid
//...
#define PRICEST_TICK_PRICE ask

Caso contrário, como sabe que uma macro não foi definida antes? E não é uma anulação acidental

Por vezes até funciona no MetaEditor:


 
A100:

A cor só deve ser realçada se a macro tiver sido previamente definida

caso contrário, como sabemos que a macro não foi previamente definida?! e isto não é uma anulação acidental

Então precisamos de definir o que é uma macro destacada e o que não é destacado?

Pensei que todas as macros estavam em destaque. Aparentemente, a regra é diferente.

 
fxsaber:

Então precisamos de decidir o que é uma macro destacada e o que não é destacado?

Pensei que todas as macros estavam em destaque. Aparentemente, a regra é diferente.

Penso que precisamos de decidir para que serve o destaque, será apenas para a beleza ou a informatividade? De momento não existem regras enquanto tal:

Em geral, é desejável que se um identificador já tiver sido definido e não estiver indefeso, deve ser destacado a cores

 
A100:

Penso que temos de decidir do que se trata a iluminação: é para a beleza ou para a informação? De momento não existem regras enquanto tal:

Para mim, a regra de ouro é: a macro é sempre vermelha.

 
fxsaber:

Para mim a regra é conveniente: a macro é sempre vermelha.

Qual é a conveniência aqui?
#define PRICEST_TICK_PRICE bid

O inconveniente é claro: não se pode dizer se o identificador PREÇO_TICK_PRICE foi previamente definido ou não

E por que deveria ser aqui (3)

//Ln 240
#define  PRICEST_TICK_PRICE ask //(1)
#undef  PRICEST_TICK_PRICE     //(2)
void OnStart()
{
        int PRICEST_TICK_PRICE; //(3)
}

ser vermelho? E se não está vermelho aqui (3), porque deveria estar vermelho em (1)?

Regra prática: um identificador só é vermelho se tiver sido previamente(!) definido e não desfeito

 

A100:
А в чем здесь удобство?

Posso ver que se trata de uma macro. Neste caso, não é necessário ver #define lateralmente.

O inconveniente é claro: é impossível compreender se o identificador PRICEST_TICK_PRICE foi previamente definido ou não.

Nunca tentei determiná-lo por cor. Além disso, se tudo estiver em #ifdef, MQL4 e MQL5 podem ter cores diferentes. A maneira mais fácil é fazer ALT+G no nome macro para ver se está lá ou não.

Regra prática: o identificador só é vermelho se previamente(!) tiver sido definido

Ficaria confortável se a macro fosse mencionada pelo menos uma vez algures em #define, #ifdef, #undef, etc. Mesmo que não esteja definido.