2019年4月11日木曜日

#property strict における 変数の初期化

前回のブログで 変数の初期化について少しふれました。

①Case 1
#property strict
void OnTick()
{
int a;
int b=a;
}

ここではstrict モードにして、関数内でローカル変数 a を宣言し中身を入れていません。
次に b=a で a を参照させコンパイルするとこんな警告が出ます。

possible use of uninitialized variable 'a' test.mq4 5 8

②Case2
#property strict
void OnTick()
{
int a=0;
int b=a;
}
a の宣言時に 0 を代入すると
警告は出ません。

③Case3
#property strict
void OnTick()
{
int a;
Comment(a);
}

こうした場合には警告は出ません。
0 と表示されます。
引数(ひきすう)として渡した場合は参照してもいいようです。
④Case4
#property strict
int a;
void OnTick()
{
int b=a;
}
グローバルエリアで a を宣言しました。
この場合も警告は出ません。

strict モード宣言時にローカル変数内で宣言した変数を初期化(なにかを代入)せずに参照すると警告が出ます。
警告が出ても、正常にコンパイルでき値も0として扱われます。

結論
変数は出来るだけグローバルエリアで宣言するましょう。




0 件のコメント:

コメントを投稿