![【MQL4】プリプロセッサdefineのサンプル#01](https://celebpanda.com/wp/wp-content/uploads/2021/05/セレブパンダブログ用.jpg)
量からしか数は生まれないと話ているのを聞いて、それって同じことを言っているよねと思ったセレブパンダだお。(本当は量からしか質は生まれないと言いたかったはず)
C言語と似ているMQL4では、C言語の同じようにプリプロセッサが使えます。
記号定数のdefine、関数マクロ、条件付き取込について解説します。
こんな人が対象です。
- マジックナンバーを直接コードに書き込みたくない人。
- 実行速度を少しでも早くしたい人。
記号定数のdefine
定数と同じ使い方で利用できます。
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#define KIRIBAN 100.0
void OnStart()
{
Print("購入価格は", KIRIBAN ,"です。");
}
ソース上に、意味のある数値を直接書くことはあまりよくないです。数値のみの記述では、その値がどんな意味を持った値なのかわからないからです。
また、その数値が何か所もソース上に存在した場合、修正が発生すると、全ての箇所を書き直す必要があります。
これを避ける目的でdefineを使うことがあります。例えば、RSIの閾値の上限、下限を記号定数として定義しておけば、後からソースをみても意味がわかります。
保守性もあがります。
#define RSI_UPPER 70
#define RSI_LOWER 30
では、定数と何が違うのって思いますよね。
定数で宣言した例は以下。
const int RSI_UPPER 70;
const int RSI_LOWER 30
定数の使い方だけみると、どちらを使ってもよいとなります。
#defineはプリプロセッサと呼ばれ、コンパイルを開始する前に行われる処理(プリプロセス)を表します。
なので、#defineで定義したものは、実際にはコンパイルする直前に以下のようになっています。
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
void OnStart()
{
Print("購入価格は", 100.0 ,"です。");
}
コードの該当箇所を直接置き換えることになります。
多少実行速度があがると思いますが、記号定数とつかう場合は、どちらでもよいということになります。
では、まただお。