Fehler, Irrtümer, Fragen - Seite 1837

 
fxsaber:
Das ist null.

Ja, ich hab's. Denn wie kann es einen Auftrag mit TRADE_TRANSACTION_DEAL_ADD... geben?

Ich danke Ihnen.

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

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

Ergebnis
1
52
 

Bei den Tests zeigt das Protokoll nicht den Zeitpunkt an, zu dem der Auftrag abläuft:

2017.03.30 22:12:30.271 Core 1 2017.01.18 16:55:00 Kauflimit 0,01 EURUSD bei 1,06789 (1,06879 / 1.06889 / 1.06889)<br / translate="no">2017.03.30 22:12:30.271 Kern 1 Auftrag abgelaufen [#4 Kauflimit 0.01 EURUSD bei 1.06789]

Ich würde es gerne so haben:

2017.03.30 22:12:30.271 Kern 1 2017.01.18 17:25:00 Auftrag abgelaufen [#4 Kauflimit 0,01 EURUSD bei 1,06789]

 
fxsaber:
sizeof-bug
Ergebnis

Ein lokales Array von 1 Byte wurde zu einem universellen Array-Objekt, wenn es als Parameter übergeben wurde. Der Objektpuffer-Zeiger ist tatsächlich mit dem lokalen Array verbunden, kann aber nicht weiterverteilt werden.

Die Funktion f kann ein beliebiges Array als Eingabe verwenden, auch ein dynamisches Array.

 
Slawa:

Ein lokales Array von 1 Byte wurde zu einem universellen Array-Objekt, wenn es als Parameter übergeben wurde. Sein Pufferzeiger ist tatsächlich mit dem lokalen Array verbunden, kann aber nicht weiterverteilt werden.

Die Funktion f kann ein beliebiges Array eingeben, einschließlich dynamischer

Dies ist eine sehr interessante Erklärung der internen Architektur. Aber aus diesem Grund führt sizeof zu einem ganz anderen Ergebnis, als Sie beim Programmieren erwarten.

D.h. es gibt eine gewisse Inkonsistenz in der Dokumentation, und es wird unklar, wie man codiert, ohne jedes Mal nachzusehen.


Wenn sizeof nach Beendigung der Funktion aufgerufen wird, wird die Größe außerdem unabhängig von solchen Nuancen bestimmt.

 

Die Option, Positionen ohne Warnung zu synchronisieren, funktioniert nicht, und die Ausführung innerhalb von Spreads funktioniert ebenfalls nicht,
Er öffnet zum schlechtesten Preis und kann nicht angepasst werden, und das gilt für alle Terminals. Alle Stellen sind besetzt.

Worauf warten, wenn der Anbieter alle Plusgeschäfte abschließt!

 
fxsaber:

Dies ist eine sehr interessante Erklärung der internen Architektur. Aber aus diesem Grund erzeugt sizeof eine völlig andere Ausgabe als die, die Sie beabsichtigen, wenn Sie programmieren.

D.h. es gibt eine gewisse Inkonsistenz in der Dokumentation, und es wird unklar, wie man codiert, ohne jedes Mal nachzusehen.


Wenn Sie sizeof nach dem Beenden einer Funktion aufrufen, wird die Größe außerdem unabhängig von solchen Nuancen bestimmt.

Haben Sie die Dokumentation über sizeof aufmerksam gelesen?

Die Operation zur Bestimmung der Größe eines Datentyps oder der Größe eines Objekts eines beliebigen Datentyps ( sizeof )

Mit Hilfe dersizeof-Operation ist es möglich, die Größe des Speichers zu bestimmen, der einem Bezeichner oder einem Typ entspricht. Die Operation sizeof hat das folgende Format:

Beispiel:

sizeof(Ausdruck).

Jeder Bezeichner oder ein in Klammern eingeschlossener Typname kann als Ausdruck verwendet werden. Beachten Sie, dass der Name eines ungültigen Typs nicht verwendet werden kann, und ein Bezeichner kann sich nicht auf ein Bitfeld beziehen oder ein Funktionsname sein.

Wenn ein statisches Array als Ausdrucksname angegeben wird (d. h. die erste Dimension wird angegeben), ist das Ergebnis die Größe des gesamten Arrays (d. h. das Produkt aus der Anzahl der Elemente und der Länge des Typs). Wenn ein dynamischer Array-Name als Ausdruck angegeben wird (die erste Dimensionalität wird nicht angegeben), ist das Ergebnis die Größe des dynamischen Array-Objekts.

Wenn sizeof auf einen Struktur- oder Klassentypnamen oder auf einen Bezeichner angewendet wird, der einen Struktur- oder Klassentyp hat, ist das Ergebnis die tatsächliche Größe der Struktur oder Klasse.

PS Es gibt direktere Möglichkeiten, die Größe eines Arrays zu ermitteln

 
Slawa:

Wenn ein statischer Array-Name als Ausdruck angegeben wird (d.h. die erste Dimension ist angegeben), ist das Ergebnis die Größe des gesamten Arrays (d.h. das Produkt aus der Anzahl der Elemente und der Länge des Typs).

Ich habe in dem Zitat nur den Teil weggelassen, der sich auf den oben genannten Code bezieht. Es handelt sich um ein statisches Array, und das Produkt zweier Zahlen, die Sie erwähnen, sollte gleich eins sein.

Wenn nach der Übergabe des Arrays von statischen wird dynamisch und auf Rückkehr wird es wieder statisch, dann wie Sie das Array in statische Form dann übergeben?

PS Es gibt direktere Möglichkeiten, die Größe des Arrays zu ermitteln

sizeof ist gut, weil es universell einsetzbar ist - auch für allgemeine Typen und Arrays. Und ArraySize ist nur auf Arrays anwendbar.
 
fxsaber:

Von dem Zitat habe ich nur den Teil übrig gelassen, der sich auf den obigen Code bezieht. Es handelt sich um ein statisches Array, und das Produkt der beiden von Ihnen genannten Zahlen sollte eins sein.


Noch einmal. Wo ein statisches Feld ist, wird eines angezeigt.

Die Funktionsparameter waren nie statische Arrays. Es gibt ein Objekt eines unbekannten Arrays im Vorfeld. Dynamische, statische, Zeitreihen, Indikatorpuffer

Wie hilft Ihnen die "Universalität von sizeof"? Es handelt sich nicht um C oder C++ mit direktem Zugriff auf den Speicher. Außerdem muss man bei der Interpretation der sizeof-Ergebnisse vorsichtig sein. Weisen Sie einem dynamischen Array 1000 Elemente zu und fragen Sie nach sizeof. Ich spreche speziell über C++ - Sie scheinen von dem Ergebnis überrascht zu sein

Und Sie haben noch nichts über _countof gehört?

 
Slawa:

Noch einmal. Wo ein statisches Feld ist, wird eines angezeigt.

Die Funktionsparameter waren noch nie statische Arrays. Es gibt ein Objekt eines unbekannten Arrays im Vorfeld. Dynamische, statische, Zeitreihen, Indikatorpuffer.

Wie hilft Ihnen die "Universalität von sizeof"? Es handelt sich nicht um C oder C++ mit direktem Speicherzugriff. Außerdem muss man bei der Interpretation der sizeof-Ergebnisse vorsichtig sein. Weisen Sie einem dynamischen Array 1000 Elemente zu und fragen Sie nach sizeof. Ich spreche speziell über C++ - Sie scheinen von dem Ergebnis überrascht zu sein

Und Sie haben noch nichts über _countof gehört?

Ich kenne mich nur ein wenig mit MMS aus. Ich kenne SI nicht, deshalb habe ich auch nichts gehört.

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

Das Ergebnis ist 52. Ist das in Ordnung? An der internen Architektur habe ich nichts auszusetzen. Ich möchte nur sichergehen, dass meine Wahrnehmungen während der Codierung nicht falsch sind. Die Vorstellungen werden auf der Grundlage einer sorgfältigen Lektüre der Dokumentation und der Testskripte auf Mehrdeutigkeiten hin gebildet.


In diesem Fall bin ich auf ein seltsames Verhalten in einem großen Code gestoßen. Und nach langem Studium habe ich schließlich eine Nuance gefunden, die Sie beschreiben und die für niemanden in diesem Forum offensichtlich ist. Und mit dem obigen Beispiel stellt sich heraus, dass Sie sizeof für dynamische Arrays überhaupt nicht tun können (das Ergebnis ist immer 52).

Grund der Beschwerde: