Errori, bug, domande - pagina 2868

 
Vladimir Simakov:
No, la logica degli sviluppatori è comprensibile, ma per me, preferisco specificare esplicitamente u'y' quando e se ne ho bisogno

Solo che non è chiaro come viene sconfitto il tipo di char.

 
Un errore di compilazione:
void OnStart()
{
        Print(typename( char(0))); //Error: '0' - some operator expected
}

ma in questo modo:

        Print(typename((char)0) ); //нормально

Che differenza fa?

 
A100:
Errore di compilazione:

ma in questo modo:

Che differenza fa?

Sembra che solo "(tipo) valore" sia una conversione di tipo, ma "tipo (valore)" è una sorta di inizializzazione, che nel tuo caso non può restituire nulla. Non ho aperto μl da molto tempo però ))

 
Alexandr Andreev:

In µl, solo "(tipo) valore" sembra essere una conversione di tipo, ma "tipo (valore)" è una sorta di inizializzazione, che nel tuo caso non può restituire nulla. Non ho aperto μl da molto tempo però ))

Quindi apritehttps://www.mql5.com/ru/docs/basis/types/casting

Unità: Conversione di tipi numerici."La conversione esplicita dei tipi è scritta come segue"... più avanti nel testo

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 

Sì, l'ho controllato anch'io, ricordo di essermi imbattuto in questo molto tempo fa a proposito di quello che ho scritto sopra. Mi scuso per l'informazione errata).

 
A100:
Errore di compilazione:

ma in questo modo:

Che differenza fa?

Sì, anche questo è un errore di compilazione

#define  J '+'          // char

void OnStart()
{
    Print((typename)J);
}
#define  J '+'          // char

void OnStart()
{
    Print((typename)(J));
}
 
Vladimir Simakov:
La logica degli sviluppatori è abbastanza chiara ma, per quanto mi riguarda, è meglio specificare chiaramente u'y' quando e se ne ho bisogno

Non capisco questa logica. Quando c'è un'ottimizzazione totale ovunque e dappertutto, e la riduzione delle risorse come priorità,
perché fare il tipo di carattere base in Unicode aumentandolo a 2 byte.
Quindi il tipo di stringa mql risulta costoso.
Davvero, è meglio avere uno specificatore supplementare u'sh'

char dal fantasma del tipo è solo sostituito.

#define  J (char)'+'     // char

void OnStart()
{
    Print(J);           // 43
    Print(typename(J)); // char
}

Ma in questo caso abbiamo una differenza di tipi.

#define  J '+'              

void OnStart()
{
   Print(J);                // 43
   Print(typename(J));      // ushort
   Print(typename(char));   // char
}

È un vero casino con questo Unicode.

 
Roman:

Sì, anche questo è un errore di compilazione.

Hai un errore di sintassi - dacci un esempio di codice funzionante con (typename) tra parentesi. Si potrebbe anche scrivere (OnStart) tra parentesi

 

Un altro esempio di messaggio discutibile del compilatore MQL:

#ifdef __MQL__
void OnStart() {
{
}
#endif //Error: '#endif' - unexpected end of program

cosa c'entra #endif - e come si fa a indovinare dove si trova effettivamente l'errore?

nel momento in cui C++ informa dell'errore

#ifdef __cplusplus
void OnStart() {
{
} //Error: expected '}' at end of input
#endif
 

Spero che gli sviluppatori di mql stiano leggendo questa pagina.

Quando farete un validatore normale?

C'è un bug nel validatore per mt4. Non è possibile ottenere il prezzo di apertura/chiusura, i dati della candela Hi/Low da altri timeframes.