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

 
Academic:

なぜなら、ObjectGetDouble 関数は 参照を渡し、if 文は両方の呼び出しが返す真偽をチェックし、したがって両方の関数が真を返す場合にのみこれらの変数が処理され、つまり両方の変数が正しい値に設定されないことはありえないからです。


コンパイラは、ObjectGetDoubleの 呼び出しの結果として、これらの変数が必ず初期化されることを確認するために、それほど心を広げてはいないのです。代わりに、参照渡しされる入力パラメータの値が明示的に設定されるような独自の変数を書いてみてください。コンパイラは何と言うのだろう。
 
Rosh:
コンパイラは、ObjectGetDoubleの 呼び出しの結果として、これらの変数が必ずしも初期化されることを確認するために、十分に心を広げていない。代わりに、参照渡しされる入力パラメータの値が明示的に設定されるように、自分で書いてみてください。コンパイラは何と言うのだろう。


ラシード それは「意識」ではなく、「数学」なんです。

 
Academic:


ラシード それは「意識」ではなく、「数学」なんです。

1.論理 式の短縮評価」なんてのもあるんですね。

2.コンパイラは、参照渡しされた変数に値が入るかどうかを確実に知ることはできません。

3.警告とは、あくまでも問題の可能性に注意を促すためのものです。

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
Academic:


ラシード それは「意識」ではなく、「数学」なんです。

では、そのような融合を定義してみましょう。

bool AlwaysGood( double & param)
  {
   return true;
  }
ここで、param変数が初期化される保証はあるのでしょうか?
 
Rosh:

では、そのようなffrunctionを定義してみましょう。

param変数が初期化される保証はあるのでしょうか?

結果 "param "を変更しない関数です。だから、ここでは警告を1000%出すべきだ :)

ここでの標準的な解決方法は、値を変更できないコード実行ブランチがある場合、この関数は値を変更しないものとみなす、というものです。そして、警告を発生させます。

ラシッド、最近のC++やCコンパイラのどれかを使ってそのようなコードをコンパイルして欲しいのですか?どれも左利きの警告は出ないと思いますよ。

また、そのようなものを検出することに「問題」があるとすれば、突然、そのような最適化が全くないことに非常に強い疑念を持ち始めることになります。それとも、あるのでしょうか?

 
Academic:

ラシード 最近のC++やCコンパイラで同じようなコードをコンパイルしても、左利きの警告を出すものはないだろう。

何を言い争ってるんだw0は入れるな。

PS 必ずメッセージがあります(以下、数行かもしれませんが)

 
Academic:

これは明らかに改善されていません。特に、そのようなものの検出に「問題」がある場合、そのような最適化が全く行われていないのではないかという大きな疑問が湧きます。それとも、あるのでしょうか?

ObjectGetDouble 関数は、独立した(つまりライブラリの)実装を持つため、コンパイラの制御の及ばないものである
Документация по MQL5: Графические объекты / ObjectGetDouble
Документация по MQL5: Графические объекты / ObjectGetDouble
  • www.mql5.com
Графические объекты / ObjectGetDouble - Документация по MQL5
 
Academic:


ObjectGetDoubleの ヘルプを見ると。


関数の成功に応じて、true または false を返す。成功すれば、最後のパラメータで参照渡しされた先の変数に、プロパティの値が格納される。


したがって、受信変数の 充填は、何らかのエラーが発生した場合、保証されないと結論づけられる。だから、コンパイラのメッセージ は有効なのです。

IMHO

 

最新のビルドでは、何かが狂っているようです。

小さなEAをすること。

int OnInit()
  {
   Print("Все нормально!"); 
   return(0);
  }

テスターを起動する。

2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 Everything is OK!

EAに変更を加える。

int OnInit()
  {
   Print("Тестер, Аууу, ты где?"); 
   return(0);
  }

コンパイルしてテスターを走らせたら、反応した。

2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 すべて正常です!

端末を再起動するだけでいいのです。

 
Serj_Che:

最新のビルドでは、何かが狂っているようです。

小さなEAをすること。

テスターを起動する。

2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 Everything is OK!

EAに変更を加える。

コンパイルしてテスターを走らせたら、反応した。

2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 すべて正常です!

端末を再起動するだけでいいのです。

すみません。今日か明日には、この不幸なエラーのない新しいビルドがリリースされる予定です。