Warning: The magic method InvisibleReCaptcha\MchLib\Plugin\MchBasePublicPlugin::__wakeup() must have public visibility in /home/xs10777/autofx100.com/public_html/wp-content/plugins/invisible-recaptcha/includes/plugin/MchBasePublicPlugin.php on line 37
デバッグを効率化してくれる便利な定義済みマクロ | autoFX

デバッグを効率化してくれる便利な定義済みマクロ

build600の追加機能で、デバッグの心強い味方

定義済みマクロという機能がメタエディターのbuild600で実装されました。

定義済みマクロとは、MQL4プログラムに関する情報を取得して、デバッグを支援するための定数のことです。

“マクロ”という文言は、とっつきにくい印象を与えますが無視して構いません。この文言自体は、この際どうでも良いです。

定義済みマクロを使うことで、定義済みマクロを埋め込んだソースコードの行数やファイル名、関数名等を出力できるようになります。

従って、デバッグではPrint()文と定義済みマクロを併用すると良いでしょう。

定義済みマクロの詳細はこちらをご覧ください。

全9種類の定義済みマクロがありますが、使いやすそうなのは以下の3つでしょうか。

  • __LINE__ (マクロを配置したソースコードの行数)
  • __FILE__ (コンパイルしたファイル名)
  • __FUNCTION__ (マクロが配置された関数名)

私は以下のように使うことにしました。

Print("File: ", __FILE__, " Function: ", __FUNCTION__, " メッセージ内容");

__LINE__は無くても良いかなと。何千、何万行のコードを書くことは殆どなく、ファイル名と関数名とメッセージ内容が分かれば該当箇所はすぐ特定できますので。

以下、蛇足です。

全9種類の定義済みマクロのうち、__FUNCSIG__が分かりにくいと思いますが、これは関数名だけでなく戻り値と引数の型も含めて出力します。

例えば、OnTick関数内で__FUNCTION__を呼び出せば「OnTick」が出力され、__FUNCSIG__を呼び出せば「void OnTick()」が出力されます。

何のために__FUNCSIG__が用意されているかというと、関数のオーバーロードを使用している場合に、同じ関数名のうち、どの種類が呼び出されたかを識別するためです。

「MQL4で定義済みの定数を利用する」にはオーバーライドと書いてありますけど、これは間違いです。原文のリファレンスを見れば、overloaded(オーバーロード)とはっきりと書いてあります。

オーバーライドとオーバーロードは似た表現ですが、意味が全然違いますのでご注意ください。このサイト、他の記事でも嘘が書いてあるのを見たことがあるので信用できません。

2017/10/7追記:上記リンク先の記事「MQL4で定義済みの定数を利用する」が削除されましたので、リンクを解除しました。

オーバーライドとかオーバーロードって何?という声が聞こえてきそうですが、そういう方はぜひググって調べてみてください。

まぁ、オブジェクト思考でプログラミングしない人には殆ど関係ありませんし、オブジェクト指向でプログラミングする場合でも、オーバーロードはそんなに使う機能ではないので(頻繁に使うのは逆に良くないので)、気にする必要はないかなとは思いますが。

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG