externとinputの違い - ページ 5

 
Alexey Navoykov:

これらの初期化が別々のインクルードファイルで行われていると想像してください。そして、最終的な結果は、これらのファイルが含まれる順番に依存します。

まあ~、こんな明らかなバグも、このエクスターンでは

だから、意味がない、古いコードとの互換性のためだけだ、externをinputに置き換えてエラーを修正せよ、と書いているのですが...。目的がはっきりしない...。externは意味がない - 調べてみてください

 
Alexey Navoykov:

残念ながら、MQL5でのextern変数の実装はまだ確定していません。 つまり、これらの変数の強制的な1回限りの 初期化を制御することができないのです。

例えば、このような書き方をすることがあります。

これらの初期化が別々のプラグインで行われることを想像してください。そして、最終的な結果は、これらのファイルが含まれる順番に依存します。

あるいは、このように書くこともできます(実行ファイル)。

ここでは、extern-variableを全く初期化していませんが、エラーも出ていません。

したがって、他のファイルで同じ変数が定義されているかどうかを制御することはできません。 誤って名前を変えてしまっても、他のファイルでは別の名前の変数があるのに、プログラムは何事もなかったかのようにコンパイルされます。

全体として、どこにもフィットしない。そのため、extern変数ではなく、関数を使うのがよいでしょう。 関数は、1つだけ定義され、それ以上でも以下でもないことが保証されています。

この方法であれば、パソコンを一切使わないで済むはずです。目をつぶってキーボードをつつけば、ナンセンスなものが出てくるからです。

externで本当に問題になるのは、入力からexternを作ろうとしたときです。詳しいことは覚えていない、ずいぶん前のことだ。その結果、externを一切拒否し、インクルードファイルで簡単な変数を宣言し、その値をEA initeで関数呼び出し により設定することにしました。

 
Igor Makanu:

そうそう、この外付け部品には、こんなわかりやすいバグもあるんだ。

ということで、意味がない、古いコードとの互換性のためだけだ、externをinputに置き換えてエラーを修正しろ、それ以外はヘルプに書いてある、と書いているのですが......。目的がはっきりしない...。externは、いくら探しても意味がない。

感があります。MT5では、インクルードファイルのexternは全く入力されません。

 
Dmitry Fedoseev:

理にかなっている。MT5では、インクルードファイルのexternは全く入力にならない。

なぜインクルードファイルにexternsを追加するのですか?

現代のプログラム作成が どうなっているかは知りませんが、私は手続き型スタイルで書くことを学び、その後OOPを使い始めました。 最初のスタイルと2番目のスタイルは、それぞれの論理ユニットが他のプログラムに移されたときに完全に機能しなければならないということを意味しています。つまり、関数が書かれ、その説明(ヘッダー)にはそれが使用するすべてのパラメータがあり、イプルートは必要ありません。この関数を他のファイルにカット&ペーストすると、そのまま「移動」します。

また、iprouts自体はユーザーインターフェースを作成するだけで、常にメインファイルに記述しておく必要があります。


とインクルードファイルでexternを使用して、バグを追跡するのは難しい取得するイミホ方法は、上記の@Alexey Navoykovは それが起こる方法を示した、残念ながら変数名の半分以上がすべてのプログラマが手紙に同じ名前、大文字/小文字を使用して最大の違いは、例としてMagicNumberまたはマジック - あなたはKBを見て、他のすべての変数は、そうあなたの方法で、その変数に "陰影 "に脅威である少数の人々は今ECTERPSを使用してください。

 
Igor Makanu:

なぜインクルードファイルでiprtuを追加するのですか?

私はプログラムを書くの 現代世界で何が起こっているのか知らないが、私は手続き型のスタイルで書くことを学び、その後、OOPを使用し始め、最初と2番目のスタイルの両方でそれは、各論理ユニットは、別のプログラムに転送するときに完全に機能しなければならないことが示唆されている、すなわち、関数を書いた - その説明で(タイトルに)それが使用するすべてのパラメータを持って - それはIPROUTを必要としない - この関数をカットして別のファイルに挿入、それはそのまま - クラスと同じ "移動 "です。

そして、iprout自体はユーザーインターフェースを作るだけで、常にメインファイルに記述されるべきものです。

そうではありません。インクルードファイルの中にexternsを追加します。インクルードファイルで、メインファイルで宣言された入力を使用できるように。

ちなみに、インクルードファイルを使い始めるとすぐに必要になることがほとんどです。

 
Dmitry Fedoseev:

こんなもんじゃない。インクルードファイルにexternsを追加します。インクルードファイルで、メインファイルで宣言された入力を使用できるようにします。

ちなみに、インクルードファイルを使い始めるとほぼ同時に必要になるのがこれです。

ばってんをつける

 
Igor Makanu:

EXTERNを使うことが適切であることを例示する。

以前からある んですよ。

 
Dmitry Fedoseev:

この方法を取るなら、コンピューターは一切使わない方がいい。目をつぶってキーボードをつつくと、くだらないものが出てくるからです。

もちろん、ゴミは出ますが、ほとんどコンパイルできません。コンパイラーの仕事は、ゴミをコンパイルすることではありません。そして今回は、それができていない。
 
Dmitry Fedoseev:

以前からここに あったんです。

そういうことなんです。

あなたの例は、隠れたバグの発生、変数名xがよく使われる...。前書

イモトは、こんな風に見えるはずです。

extern int x;

int z()
  {
   static int x;
   x=122;
   return x;
  }
 
Igor Makanu:

そういうことなんです。

あなたの例は、隠しバグの産卵、変数名xはよく使われますね...。前書

イモトは、こんな風に見えるはずです。

まさかね。変数xはある関数だけでなく、すべての関数で利用できるようにする。さらに言えば、メインファイルだけでなく、接続されているすべてのファイルで利用可能であるべきです。