Errori, bug, domande - pagina 1837

 
fxsaber:
Questo è zero.

Sì, ho capito. Infatti, come può esserci un ordine con TRADE_TRANSACTION_DEAL_ADD...

Grazie.

 
sizeof-bug
void f( uchar &Array[] )
{
  Print(sizeof(Array));
}

void OnStart( void )
{
  uchar Bytes[1];
  
  Print(sizeof(Bytes));
  
  f(Bytes);
}

Risultato
1
52
 

Durante i test, il registro non indica l'ora in cui l'ordine scade:

2017.03.30 22:12:30.271 Core 1 2017.01.18 16:55:00 comprare limite 0,01 EURUSD a 1,06789 (1,06879 / 1.06889 / 1.06889)<br / translate="no">2017.03.30 22:12:30.271 Core 1 ordine scaduto [#4 buy limit 0.01 EURUSD a 1.06789]

Vorrei che fosse così:

2017.03.30 22:12:30.271 Core 1 2017.01.18 17:25:00 ordine scaduto [#4 buy limit 0,01 EURUSD a 1,06789]

 
fxsaber:
sizeof-bug
Risultato

Un array locale di 1 byte è diventato un oggetto array universale quando viene passato come parametro. Il puntatore del buffer dell'oggetto è effettivamente associato all'array locale, ma non può essere ridistribuito.

La funzione f può prendere qualsiasi array come input, incluso un array dinamico.

 
Slawa:

Un array locale di 1 byte è diventato un oggetto array universale quando viene passato come parametro. Il suo puntatore al buffer è effettivamente associato all'array locale, ma non può essere ridistribuito.

La funzione f può immettere qualsiasi array, anche dinamico

Questa è una spiegazione molto interessante dell'architettura interna. Ma a causa di questo, sizeof produce un risultato abbastanza diverso da quello che ci si aspetta quando si codifica.

Cioè c'è qualche incoerenza nella documentazione e diventa poco chiaro come codificare senza controllare ogni volta.


Inoltre, se sizeof è chiamato dopo l'uscita della funzione, la dimensione è determinata senza essere influenzata da tali sfumature.

 

L'opzione di sincronizzare le posizioni senza preavviso non funziona e non funziona nemmeno l'esecuzione all'interno degli spread,
Si apre al prezzo peggiore e non può essere regolato, e così su tutti i terminali. Tutte le posizioni sono aperte.

Cosa aspettare quando il provider chiude tutti i trade plus!

 
fxsaber:

Questa è una spiegazione molto interessante dell'architettura interna. Ma a causa di questo sizeof produce un output completamente diverso da quello che si intende quando si codifica.

Cioè c'è una certa incoerenza nella documentazione e diventa poco chiaro come codificare senza controlli ogni volta.


Inoltre, se chiamate sizeof dopo essere usciti da una funzione, la dimensione viene determinata senza essere influenzata da tali sfumature.

Avete letto attentamente la documentazione su sizeof?

L'operazione di prendere la dimensione di un tipo di dati o la dimensione di un oggetto di qualsiasi tipo di dati ( sizeof )

Con l'aiuto dell'operazione sizeof è possibile determinare la dimensione della memoria che corrisponde a un identificatore o a un tipo. L'operazione sizeof ha il seguente formato:

Esempio:

dimensione di(espressione).

Qualsiasi identificatore o un nome di tipo racchiuso tra parentesi può essere usato come espressione. Si noti che non si può usare il nome di un tipo nullo e che un identificatore non può riferirsi a un campo di bit o essere un nome di funzione.

Se una matrice statica viene specificata come nome di un'espressione (cioè, viene specificata la prima dimensione), il risultato è la dimensione dell'intera matrice (cioè, il prodotto del numero di elementi per la lunghezza del tipo). Se il nome di un array dinamico è specificato come espressione (la prima dimensionalità non è specificata), il risultato è la dimensione dell'oggetto array dinamico.

Quando sizeof viene applicato a un nome di tipo di struttura o di classe o a un identificatore che ha un tipo di struttura o di classe, il risultato è la dimensione effettiva della struttura o della classe.

PS ci sono modi più diretti per trovare la dimensione di un array

 
Slawa:

Se il nome di un array statico viene specificato come espressione (cioè viene specificata la prima dimensione), il risultato è la dimensione dell'intero array (cioè il prodotto del numero di elementi per la lunghezza del tipo).

Ho lasciato fuori dalla citazione solo il pezzo che si riferisce al codice di cui sopra. Lì è un array statico, e il prodotto di due numeri che menzioni dovrebbe essere uguale a uno.

Se dopo aver passato l'array da statico diventa dinamico e al ritorno diventa di nuovo statico, allora come si fa a passare l'array in forma statica?

PS ci sono modi più diretti per scoprire la dimensione dell'array

sizeof è buono a causa della sua universalità - applicabile anche ai tipi comuni e agli array. E ArraySize è applicabile solo agli array.
 
fxsaber:

Dalla citazione, ho lasciato solo il pezzo che si riferisce al codice di cui sopra. È un array statico, e il prodotto di due numeri che hai menzionato dovrebbe essere uno.


Ancora una volta. Dove c'è un array statico, ne mostra uno.

I parametri della funzione non sono mai stati array statici. C'è un oggetto di una matrice sconosciuta prima. Buffer dinamico, statico, serie temporali, indicatore

Come vi aiuta "l'universalità di sizeof"? Questo non è C o C++ con accesso diretto alla memoria. E bisogna fare attenzione quando si interpretano i risultati di sizeof. Allocare una matrice dinamica a 1000 elementi e chiedere la sizeof. Sto parlando specificamente di C++ - sembra che tu sia sorpreso del risultato

E non hai sentito nulla di _countof?

 
Slawa:

Ancora una volta. Dove c'è un array statico, ne mostra uno.

I parametri della funzione non sono mai stati array statici. C'è un oggetto di una matrice sconosciuta prima. Buffer dinamico, statico, serie temporale, indicatore.

Come vi aiuta "l'universalità di sizeof"? Questo non è C o C++ con accesso diretto alla memoria. E bisogna fare attenzione quando si interpretano i risultati di sizeof. Allocare una matrice dinamica a 1000 elementi e chiedere la sizeof. Sto parlando specificamente di C++ - sembra che tu sia sorpreso del risultato

E non hai sentito nulla di _countof?

Conosco solo un po' di MQL. Non conosco il SI, ecco perché non l'ho sentito.

void OnStart( void )
{
  uchar Bytes[];
  
  ArrayResize(Bytes, 100);
  
  Print(sizeof(Bytes));
}

Il risultato è 52. Va bene? Non ho nessuna lamentela sull'architettura interna. Voglio solo assicurarmi che le mie percezioni durante la codifica non siano sbagliate. Le nozioni si formano sulla base di un'attenta lettura della documentazione e degli script di test alla ricerca di ambiguità.


In questo caso, ho riscontrato un comportamento strano in un codice di grandi dimensioni. E dopo una lunga ricerca ho trovato una sfumatura descritta da voi, che difficilmente è ovvia per chiunque su questo forum. E con l'esempio di cui sopra si scopre che non è possibile fare sizeof per gli array dinamici (il risultato è sempre 52).