エラー、バグ、質問 - ページ 1837

 
fxsaber:
それはゼロです。

はい、了解です。確かに、TRADE_TRANSACTION_DEAL_ADDの注文があるのはどうしてだろう...。

ありがとうございます。

 
サイズオブバグ
void f( uchar &Array[] )
{
  Print(sizeof(Array));
}

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

結果
1
52
 

テスト中、ログに注文の有効期限が表示されない。

2017.03.30 22:12:30.271 Core 1 2017.01.18 16:55:00 買い指値 0.01 EURUSD at 1.06789(1.06879 / 1.06889 / 1.06889)<br / translate="no">2017.03.30 22:12:30.271 Core 1 order expired [#4 buy limit 0.01 EURUSD at 1.06789] ←クリックすると拡大します。

こんな感じにしてほしい。

2017.03.30 22:12:30.271 Core 1 2017.01.18 17:25:00 注文失効 [#4 買い指値 0.01 EURUSD at 1.06789 ]。

 
fxsaber:
サイズオブバグ
結果

1バイトのローカル配列が、パラメータとして渡されるとユニバーサル配列オブジェクトになりました。オブジェクトバッファポインタは、実際にはローカル配列と関連付けられていますが、再配布はできません。

f関数は,動的配列を含む任意の配列を入力として受け取ることができる.

 
Slawa:

1バイトのローカル配列が、パラメータとして渡されるとユニバーサル配列オブジェクトになりました。そのバッファポインタは実際にはローカル配列と関連付けられているが,再分配はできない.

関数 f は,動的なものを含む任意の配列を入力することができます.

内部アーキテクチャの解説は非常に興味深い。しかし、このため、sizeofはコーディング時に期待するものとは全く異なる結果を生み出します。

つまり、ドキュメントに矛盾があり、いちいち確認しないとコーディングの仕方がわからなくなるのです。


また、関数が終了した後に sizeof を呼び出すと、そのようなニュアンスに影響されずにサイズが決定される。

 

警告なしでポジションを同期させるオプションが機能せず、スプレッド内での実行も機能しない。
最悪の価格で開いてしまい、調整できないなど、すべての端末で発生します。全ポジションを開放。

プロバイダーが全てのプラス取引を終了した時の待ち時間は!

 
fxsaber:

内部アーキテクチャの解説は非常に興味深い。しかし、このsizeofのせいで、コーディング時に意図したものとは全く違う出力になってしまうのです。

つまり、ドキュメントに矛盾があり、毎回チェックしないとどうコーディングしたらいいのかわからなくなるのです。


また、関数の終了後にsizeofを呼び出すと、そのようなニュアンスに影響されずにサイズが決定される。

sizeofに関するドキュメントを 熟読されましたか?

データ型のサイズまたは任意のデータ型のオブジェクトのサイズを取得する操作 ( sizeof )

sizeof操作により 識別子や型に対応するメモリの サイズを決定することができます。 sizeofの演算は次のような形式である。

sizeof(expression) です。

識別子や括弧で囲まれた型名も式として使用することができる。 また、識別子はビットフィールドを参照したり、関数名として使用することはできない。

静的配列名を式で指定した場合(つまり 1 次元目を指定した場合)、結果は配列全体のサイズ(つまり要素数と型の長さの積)となる。動的配列名を式で指定した場合(1 次元目を指定しない場合)、結果は動的配列 オブジェクトのサイズとなる。

構造体やクラスの型名、または構造体やクラスの型を持つ識別子に sizeof を適用すると、その結果は構造体やクラスの実際のサイズになります。

PS 配列のサイズを調べるには、もっと直接的な方法があります。

 
Slawa:

静的配列名を式で指定した場合(つまり1次元目を指定した場合)、結果は配列全体のサイズ(つまり要素数と型の長さの積)となります。

上記のコードに言及している部分のみ、引用から外しました。そこは静的配列で、あなたの言う2つの数値の積は1に等しいはずです。

staticから渡された配列が動的になり、returnで再びstaticになる場合、staticのまま渡すにはどうすればよいのでしょうか?

追記 配列のサイズを調べるより直接的な方法があります。

sizeofは、一般的な型や配列にも適用できる普遍性を持っているのが良いところです。また、ArraySizeはアレイにのみ適用されます。
 
fxsaber:

引用文から、上記のコードに言及している部分のみを残しました。静的な配列で、おっしゃる2つの数値の積は1になるはずです。


もう一度言います。静的配列があるところでは、静的配列を表示します。

関数のパラメータは決して静的な配列ではありませんでした。あらかじめ未知の配列のオブジェクトが存在する。ダイナミック、スタティック、タイムシリーズ、インジケーターバッファー

sizeofの普遍性」は、どのように役立つのでしょうか?メモリに直接アクセスできるCやC++ではありません。そして、sizeofの結果を解釈する際には注意が必要です。動的配列を1000要素に割り当て、sizeofを求める。私はC++について具体的に話しているのですが、あなたはその結果に驚いているようですね

で、_countofについては何も聞いてないんですか?

 
Slawa:

もう一度言います。静的配列があるところでは、静的配列を表示します。

関数のパラメータが静的配列であったことはない。あらかじめ未知の配列のオブジェクトが存在する。ダイナミック、スタティック、時系列、インジケータバッファ。

sizeofの普遍性」は、どのように役立つのでしょうか?メモリに直接アクセスできるCやC++ではありません。そして、sizeofの結果を解釈する際には注意が必要です。動的配列を1000要素に割り当て、sizeofを求める。私はC++について具体的に話しているのですが、あなたはその結果に驚いているようですね

で、_countofについては何も聞いてないんですか?

MQLは少ししか知らない。SIは知らない、だから聞いてない。

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

その結果が52である。大丈夫でしょうか?内部アーキテクチャに不満はない。ただ、コーディング中の認識が誤っていないか確認したいのです。ドキュメントやテストスクリプトを注意深く読み、あいまいな点がないかを確認した上で、観念を形成している。


今回は、大きなコードで不思議な挙動に遭遇しました。そして、長い間調べた結果、この掲示板にいる人なら誰でも知っているような、あなたの言うニュアンスを見つけました。また、上記のサンプルでは、動的配列に対して sizeofを行うことは全くできないことがわかりました(結果は常に52です)。