Errori, bug, domande - pagina 2116
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Gliargomenti della funzione non sono calcolati da destra a sinistra
Risultato della stringa (*) : 0:5041
Previsto in entrambi i casi: 0:0
Gliargomenti della funzione non sono calcolati da destra a sinistra
Risultato della stringa (*) : 0:5041
Era previsto in entrambi i casi: 0:0
Questo non è un errore. Il compilatore decide da solo in quale ordine calcolare gli argomenti.
Bisogna solo tenerne conto.
Questo non è un errore. Il compilatore decide da solo in quale ordine calcolare gli argomenti.
L'errore è il seguente: fino a poco tempo fa, l'ordine era strettamente definito da https://www.mql5.com/ru/forum/1111/page2040#comment_5858419(notare la data e l'estratto della documentazione: garantito). Poi l'ordine è stato tranquillamente cambiato (anche nella documentazione), e potrebbe essere cambiato in modo civile - via inline https://www.mql5.com/ru/forum/1111/page2042#comment_5860752. Ma come dovrebbe saperlo l'utente? L'utente deve indovinare? O prima di usare qualsiasi strumento, guardare la documentazione?
Errori di compilazione e altro
L'errore è questo: fino a poco tempo fa, l'ordine era strettamente definito da https://www.mql5.com/ru/forum/1111/page2040#comment_5858419(notare la data e l'estratto della documentazione: garantito). Poi l'ordine è stato tranquillamente cambiato (anche nella documentazione), ed è stato possibile cambiarlo in modo civile - via inline https://www.mql5.com/ru/forum/1111/page2042#comment_5860752. Ma come dovrebbe saperlo l'utente? L'utente deve indovinare? O guardare la documentazione prima di usare qualsiasi strumento?
Semplicemente non dovete scrivere codice che dipende dall'ordine di calcolo degli argomenti.
In C++ il compilatore ha il diritto di inlineare una funzione anche se non ha la parola chiave inline.
In MQL non c'è una parola chiave inline, il compilatore integra le funzioni solo a sua discrezione.
L'ordine dei calcoli da destra a sinistra era apparentemente dovuto al fatto che gli argomenti in questo ordine sono messi in pila,
ma possono essere passati anche attraverso i registri.
E per le funzioni incorporate, non c'è nessun passaggio di argomenti in quanto tali.
1. Non c'è bisogno di scrivere codice che dipenda dall'ordine in cui gli argomenti sono calcolati.
2. In C++, il compilatore ha il diritto di inlineare una funzione anche se non ha la parola chiave inline.
3. In MQL non c'è una parola chiave inline, il compilatore incorpora solo funzioni a sua discrezione.
4. L'ordine dei calcoli da destra a sinistra sembra essere collegato al fatto che gli argomenti sono messi in pila in questo ordine,
ma possono anche essere passati attraverso i registri.
5. E non c'è nessun passaggio di argomenti per le funzioni integrate.
1. Perché non dovrebbe essere così se l'ordine inverso era garantito nella documentazione e il codice era più semplice e chiaro in questo caso? Potremmo anche negare l'uso delle priorità dell'operazione 5 + (2*3) ed esigere che le parentesi (5 + (2*3)) siano messe ovunque - nel caso in cui sia improvvisamente cambiato
2. Il compilatore C++ impone certi requisiti alle funzioni incorporate, il che esclude una tale situazione https://www.mql5.com/ru/forum/1111/page2136#comment_6454818.
3. questo è il modo in cui è stato proposto di essere introdotto
4. Nei registri (a differenza dello stack), gli argomenti possono essere messi in qualsiasi ordine, incluso l'ordine inverso
5. Non è l'ordine di passaggio che conta - è l'ordine di calcolo degli argomenti, e questo è il caso di qualsiasi funzione con più di un argomento. E C++ ne tiene conto prima di rendere (o non rendere) una funzione in linea (vedi punto 2)
1. Perché no, se l'ordine inverso è garantito nella documentazione e il codice è più semplice e chiaro. Potremmo anche negare di usare 5 + (2*3 ) e chiedere di mettere le parentesi (5 + (2*3)) ovunque - nel caso in cui sia improvvisamente cambiato
2. Il compilatore C++ impone certi requisiti alle funzioni incorporate, il che esclude una tale situazione https://www.mql5.com/ru/forum/1111/page2136#comment_6454818.
3. questo è il modo in cui è stato proposto di essere introdotto
4. Nei registri (a differenza dello stack), gli argomenti possono essere messi in qualsiasi ordine, incluso l'ordine inverso
5. Non è l'ordine di passaggio che conta - è l'ordine di calcolo degli argomenti, e questo è il caso di qualsiasi funzione con più di un argomento. E C++ ne tiene conto prima di rendere (o non rendere) una funzione in linea (vedi punto 2)
3. Non so cosa ci guadagni. Volete proibire al compilatore di incorporare funzioni senza specificare esplicitamente inline?
2. Non so cosa intendi.
4. Stavo solo suggerendo a cosa era legato quell'ordine e la sua cancellazione. Non credo che sia stato fatto per caso e sarà sempre così d'ora in poi. Non c'è niente di terribile.
5. Vi sbagliate. In C++, l'ordine di calcolo degli argomenti non è definito.
1. Ho scritto in C++ per molti anni e non ho mai trovato questo problema.
3. Non so cosa questo possa fare per voi. Volete impedire al compilatore di incorporare funzioni senza specificare esplicitamente inline?
4. Ho solo suggerito il motivo di questo ordine e del suo annullamento. Non credo che sia stato fatto per caso e sarà sempre così ora. Non c'è niente di terribile.
5. Vi sbagliate. In C++, l'ordine di calcolo degli argomenti è indefinito.
3. Stavo suggerendo che il compilatore non dovrebbe essere autorizzato a cambiare l'ordine di calcolo degli argomenti per le funzioni senza inline.
5. L'ordine di calcolo è definito dall'implementazione (il compilatore) ed è abbastanza concreto (da destra a sinistra o da sinistra a destra), e qui, per esempio:
non è chiaro quale sia l'ordine 2-1-3 o 2-3-1 o altro.
Risultato: 5041:0:5041.
Atteso: 0:0:5041 da sinistra a destra o
5041:0:0 da destra a sinistra
non è chiaro quale sia l'ordine 2-1-3 o 2-3-1 o altro
Non capisco perché scrivere codice che è palesemente ambiguo?
Non capisco perché scrivere codice che è palesemente ambiguo?
Una domanda simile per te https://www.mql5.com/ru/forum/1111/page2037#comment_5842347