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

 
A100:

これは、コンパイラが客観的に何も情報を持っていない場合である。

つまり、f() は i を初期化しているかもしれないし、していないかもしれない。そしてこの場合、C++コンパイラは警告を出しますが、MQLの方は警告を出しません。

C++ではメモリセルのアドレスは隠蔽されないので、変数がゴミで初期化されるのはそのためです。
Mqlでは、メモリセルのアドレスは隠され、アクセスできない。このようにMqlの開発者はコンパイラを混乱させました ))

要するに、常に変数を初期化しておけば、頭が痛くなることはないのです。
 
Roman:

はい、しかし、最初の反復の前に、j変数はまだ初期化されていません、これはコンパイラが誓うことです。

この変数を使用しないか、ループ本体で代入i=jを下に置くと、最初のオプションの実行と同じになり、警告は出ません。コンパイラはループの論理と実行順序をチェックするのではなく、上から下まで構文をチェックする、そう思うのですが、確かなことはわかりません)

 
サイト内検索サービスでエラーが発生しました。この検索ではこの結果は 得られません。
 

fxsaber:

そして、他の場面でも。

返信を押すと端末が揺れますが、これは素晴らしい技術革新です。

 
コンパイルエラーです。
#define  MACRO(X)\ //Error: '\' - unexpected in macro definition
              X
 
TheXpert:

を押すと、端末がダウンロードされるという、画期的なものです。

全部同じことなんだけど...。そして、私はほとんどここで(同じドロップダウンメニューの財布と未読のトピックで)釘付けになった質問で、そしてあなたと、まだ(私は誰もがどのように知っていない)私はそのようなハングアップ..."物"

それは、この碑文をどうするか?誰がなぜ頼まれたのかを見るためのリンクはどこにもありません。(おそらく財布の中にあるのでしょうが、私はそこを見ませんでした)。

非常にしつこい印象ですが、これらの「素晴らしい」サイトの変化は、すべて一人の人間によって行われているのです......。そして、個人的には自分自身のために。まさに、自分にとって必要なものだと考えているのです。そして、我々の意見などお構いなし...。

 
Сергей Таболин:

それは、この碑文をどうするか?

普通のアプリケーションがあると消えてしまうので、よくわからない。
 

REASON_ACCOUNTが 変更された場合、論理的には以前のアカウントを受け取って作業を終了すると思っていたが、そうではなく、アカウントが変更された場合、REASON_ACCOUNTでのdeinitで新しい数字を受け取る。

論理的には、プログラムは現在のデータで作業を終了し、新しい呼び出しを行うときに新しいデータを送信し、その過程でデータを変更しないようにしなければならないのですが......。

 
Vladimir Pastushak:

REASON_ACCOUNTが 変更された場合、論理的には以前のアカウントを受け取って作業を終了すると思っていたが、そうではなく、アカウントが変更された場合、REASON_ACCOUNTでのdeinitで新しい数字を受け取る。

プログラムは論理的に、現在のデータで作業を完了し、新しい呼び出しを行うときに、途中でデータを変更することなく、新しいデータを渡さなければならない......。

以下は、不正な動作を示すコードです。

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print("Start ", (string)AccountInfoInteger(ACCOUNT_LOGIN));
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(reason == REASON_ACCOUNT)
      Print("Stop ", (string)AccountInfoInteger(ACCOUNT_LOGIN));
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+

結果

2020.10.28 17:23:05.725 Test (EURUSD,M1)        Stop 600....
2020.10.28 17:23:06.306 Test (EURUSD,M1)        Start 600....
2020.10.28 17:23:17.478 Test (EURUSD,M1)        Stop 535....
2020.10.28 17:23:18.156 Test (EURUSD,M1)        Start 535....
 
Vladimir Pastushak:

REASON_ACCOUNTが 変更された場合、論理的には以前のアカウントを受け取って作業を終了すると思っていたが、そうではなく、アカウントが変更された場合、REASON_ACCOUNTでのdeinitで新しい数字を受け取る。

論理的には、プログラムは現在のデータで作業を終了し、新しい呼び出しはすでに新しいデータを渡し、その過程でデータを変更しないはずなのですが......。

これはエラーではないので、動作は変わりません。ただ、この特殊性を考えてみてください。