externとinputの違い - ページ 3

 
//+------------------------------------------------------------------+
//|                                                          inc.mqh |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

extern int x;

int z(){
   x=122;
   return x;

エクスペト

//+------------------------------------------------------------------+
//|                                                          exp.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int x=1;

#include <inc.mqh>

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Alert(x);
   Alert(z());   
   Alert(x);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
 
Dmitry Fedoseev:

アヒルさん、図書館があるんですね。もちろん、さまざまな変数があることでしょう。意味は、インクルードでmqhを接続することです。

C++では、エクスターンはインクルードライブラリに記述するだけで、そうしないとコンパイラはプロジェクトを コンパイルさせてくれません


ドミトリー・フェドセーエフ

を外部に送信します。

コンパイル時にincluderがプログラム本体に挿入されるので、そこにincluderを記述したい場合は、同じことが起こります。


あるいは、修飾子を用いて外部のクラスや構造体を記述することもできます ;)

 
Igor Makanu:

C++では、エクスターンはインクルードライブラリに記述され、そうしないとコンパイラがプロジェクトをコンパイルさせてくれません。

ライブラリを呼び出すには、ファイル名に "#include "を使用するのが一般的です

 
Igor Makanu:

...

ポイントは、コンパイル時にインクルードがプログラム本体に挿入されるので、そこにインスタンスを記述したい場合は、同じように記述することです。

ポイントは、リンク可能なファイルをプロジェクト 全体から独立して扱えるようにし、個別にコンパイルすることで、エラーをチェックできるようにすることです。

 
Dmitry Fedoseev:

ポイントは、プロジェクト全体から独立してプラグインファイルを作業し、個別にコンパイルし、それによってエラーをチェックできるようにすることです。

ただ、それがない点を探しているのだと思います。

externは何千もの過去に書かれたコードとの互換性のために残されており、ヘルプはwikiから情報の一部をコピーした人が書いたものです。

 
Igor Makanu:

私たちは、何もないところに意味を求めているのだと思います。

externはそれ以前に書かれた何千ものコードとの互換性のために残され、ヘルプはwikiから情報の一部をコピーした人が書いたものである。

諸君、評決は?).mq5のプログラムを.mqh (#include) で書いた場合、(mql4でやったように) 予想外の結果を恐れず、安全にexternを書いたり、inputを使ったりすることができるのでしょうか?
 
Maksim Neimerik:
さて、ジェントルマンたちの評決はどうなるのでしょうか(笑)。.mq5のプログラムを.mqh (#include) で書いた場合、(mql4でやったように) 予想外の結果を恐れず、安全にexternを書いたり、inputを使ったりすることができるのでしょうか?

どんな目的かにもよりますが。それぞれ目的が違うのです。

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

標準的なMQLのコード構成を使用します:コードの最初にすべての入力、次にすべてのインクルード。 これは開発者の例が書かれている方法であり、codobaseのコードの99%はこの方法で書かれており、あなたは何も驚かないでしょう。

もう一度externについて - 彼らは、プログラムの実行 中に変更することができますが、私の意見では、それは悪い習慣である、通常OnInit()のすべての外部変数は、その変数にコピーされ、それらを(例として、4桁と5桁のために働く専門家 - ネットワークトンでこの設計の例)。


古いコードを修正する場合は、入力に置き換えてください。コンパイラは、externにレコードがあった場合、警告を出して助けてくれます。

 

ちなみに、enumの内容を変数として宣言し直しても、コンパイラは気にしないことが判明しました

enum mode5
{
   Manual         = 0,// Standard in Pips
   Kijun_sen      = 1 // Stoploss +/- Kijun-sen
};

//а потом где угодно можно объявить и компилятору будет пофиг

string Kijun_sen ="Да мне вообще пофиг что ты там объявил";      
 
Aleksey Semenov:

ちなみに、enumの内容を変数として宣言し直しても、コンパイラは気にしないことが判明しました

enum 変数を宣言するとどうなりますか?

enum mode5
{
   Manual         = 0,// Standard in Pips
   Kijun_sen      = 1 // Stoploss +/- Kijun-sen
};


string Kijun_sen ="Да мне вообще пофиг что ты там объявил"; 

void OnStart()
  {
      mode5 x = Kijun_sen;
   
  }
//+------------------------------------------------------------------+

暗黙のenum変換 tst1.mq5 24 17


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


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