2018年3月18日日曜日

MT4 終了処理deinit() VS OnDeinit()

旧終了処理deinit()とOnDeinit()を併記した場合どちらが優先されるのでしょうか
①上に書いた方
②両方
③新しいOnDeinit()

②だと応用できそうで面白いのですがどうでしょうか
以下のソースを作成しました。


void OnTick(){}
void deinit(){Print("deinit");}
void OnDeinit(){Print("OnDeinit");}

 コンパイルするとwarningが出ました。const int reasonが足りのでしょうか
余談ですがこの文は面倒です。何とかならないものでしょうか



実行し終了処理を走らせてみます。






deinit()のみ動作しているようです。
上にあるからでしょうか?

void OnTick(){}
void OnDeinit(){Print("OnDeinit");}
void deinit(){Print("deinit");}

今度はOnDeinit()を上にしてみます。

コンパイルwarningは同じです。






またもdeinit()のみが動作します。
順番ではないようです。

void OnTick(){}
void OnDeinit(const int reason){Print("OnDeinit");}
void deinit(){Print("deinit");}

const int reasonを入れてみます。





こんどはerrorでコンパイルできません。
OnDeinit()が定義されている為deinit()は拒否されています。

void OnTick(){}
void deinit(){Print("deinit");}
void OnDeinit(const int reason){Print("OnDeinit");}

順番を逆にします。





今度はOnDeinit()が拒否されました。

上にある方が優先されるようです。
考えてみれば当たり前ですが・・・







0 件のコメント:

コメントを投稿