externとinputの違い - ページ 4

 
Igor Makanu:

enum型の 変数を宣言するのはどうでしょうか?

暗黙のenum変換 tst1.mq5 24 17


EnumToString()で確認することもできます。


変数が宣言されていない型は、使われていないとしてコンパイルで捨てられただけだと思うのですが

つまり、すでに使われているenumと同じ名前の変数を誤って宣言してしまい、どことどこの膝を撃ったのか、非常に長く苦しい時間を過ごすことになるのです

 
Maksim Neimerik:
さて、皆さん、評決はいかがでしょうか?.mq5のプログラムを.mqh (#include) で書く場合、externを安全に書くことができ、(mql4でやったように)予期せぬ結果を恐れることはありませんし、inputを使って?

MT5では、外部変数を宣言するために入力を使用します。MT5におけるExternは、別の目的を持っています。

 
Dmitry Fedoseev:

MT5では、外部変数を宣言するために入力を使用します。MT5におけるExternは、別の目的を持っています。

MT5ではなぜexternが使えないのですか?- MT5の例をコンパイルしてみましたが、基本的な違いは見当たりません。

 
Igor Makanu:

なぜMT5ではexternが使えないのですか?- MT5の例をコンパイルしてみましたが、基本的な違いは見当たりません。

古いMQL4からの習慣で、入力パラメータにexternを使おうとしている人がいるからです。

そして、新しいMQL4とMQL5では、inputは#property strictと一緒に使われ、externは他の用途に使われるようになりました。

だからexternを使うなと言われたのです。

 
Artyom Trishkin:

というのも、昔のMQL4からの習慣で、入力パラメータにexternを使おうとしてしまうのです。

そして、新しいMQL4とMQL5では、inputは#property strictと一緒に使われ、externは他の用途に使われます。

だからexternを使うなと言ったんだ。

だからみんなブカブカに書こうとして、結果的にMQL5ではONLYで使ってはいけないし、他の場所でも使ってはいけないということになる)))。


古いコードでexternを見かけたら、inputに置き換えて、すべての警告を修正してください。

 
Igor Makanu:

ほら、みんなたくさんブクオフを書こうとして、結局MT5でしか使わないとか、全く使わないとかいうことになるじゃないですか ))))


もし、古いコードにexternがあったら、inputに置き換えて、すべての警告を修正してください。

ここに書かれていることは、あまり理解できない。

ただ、MQL5やMQL4でexternを#property strictで使ってプログラムの外部パラメータを宣言するのではなく、ヘルプに(漠然と)書いてあるような目的で使うという意味です。

 

考えたんだけど、ちょっと思っただけなんだけど...。MQL5では、iCustom()との連携はMQL4よりもずっと問題があるのでは(MQL4では一般的にインジケータ呼び出しでも)ないでしょうか?そうなんですか?もしYesなら、続けます。

MQL5を少し勉強し始めたところです...。

おそらく新しいトピックを立ち上げることになると思います。
 
Maksim Neimerik:
ちょっと思ったんだけど...MQL5では、iCustom()との連携はMQL4よりもずっと難しいですよね(というか、MQL4では一般的にインジケータの呼び出しは 難しい)?そうなんですか?もしそうなら、続けます。

MQL5では、iCustom()を2つのステップで操作しなければならないからです。

1.インジケーターハンドルを手に入れる

2. CopyBuffer()で指標となるバッファの値を要求する。


MQL4では、iCustom()はパラメータを持つ関数呼び出しとして機能します - 呼び出して、それを受け取る

MQL5でも同じように動作します。開発者は意図的に組み込み関数の機能を減らし、時系列へのアクセスを不便にしました。つい最近、MQL5にiClose()とiHigh()を追加しましたが、以前はCopyBuffer()と同様にデータを配列にコピーする必要がありました。

一般に、MT5はMT4よりも書き込みが多い。

 
Igor Makanu:

MQL5では、iCustom()を2つのステップで操作しなければならないからです。

1.インジケーターハンドルを手に入れる

2. CopyBuffer()で指標となるバッファの値を要求する。


MQL4では、iCustom()はパラメータを持つ関数呼び出しとして機能します - 呼び出して、それを受け取る

MQL5でも同じように動作します。開発者は意図的に組み込み関数の機能を減らし、時系列へのアクセスを不便にしました。つい最近、MQL5にiClose()とiHigh()を追加しましたが、以前はCopyBuffer()と同様にデータを配列にコピーする必要がありました。

一般に、MT5はMT4よりも書き込みが多い。

https://www.mql5.com/ru/forum/316800

MQL4 & MQL5
MQL4 & MQL5
  • 2019.06.29
  • www.mql5.com
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике...
 

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

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

extern int a=1;
extern int a=2;

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

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

extern int a;

void OnStart() { Print(a); }

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

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

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