MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 20

 
Renat Akhtyamov:
for(int i=1; int i<int n; int i++)                                                                  
...
ねお願いします。

いや、そうじゃなくて。

for( int i = 0; i < x; i++ )
{
}
for( int i = 0; i < x; i++ )
{
}
...

そう、そして、あなたが書いたデザインはまったく機能しません。

 
Artyom Trishkin:
すべての変数は独自のスコープを持っています。中括弧の中でも、そのスコープで宣言された変数には別のスコープが存在します。では、例えば、ループインデックス変数が重複しないことが分かっていて、そのような変数名を「i」のように使えば十分であり、慣習となっている場合、なぜプログラムの様々な場所に異なる名前のループインデックス変数を作らなければならないのでしょうか。

私は反論していない。

 
Renat Akhtyamov:
for(int i=1; int i<int n; int i++)                                                                  
...
ねどういたしまして。
まともなプログラマが作らないような悪い例を意図的に作ったことを、あなた自身が自覚しているのです。
 
Alexey Kozitsyn:

いや、そうじゃなくて。

for( int i = 0; i < x; i++ )
{
}
for( int i = 0; i < x; i++ )
{
}
...


なんぼのもんじゃいこの場合、つまりあなたのコードがこのようなものだった場合、何が問題になりうるのか、あなたの経験を教えてください。

int i;
for( i = 0; i < x; i++ )
{
}
for( i = 0; i < x; i++ )
{
}
...
 
Renat Akhtyamov:

私はあなたと議論していたわけではありません。

これは私のスレッドです。そして、私が悪い、最適でないアドバイスをした場合、その人を正す権利があります。あなたは、目の前の状況を見る限り、悪いアドバイスをしています。
 
Artyom Trishkin:
これは私のスレッドです。そして、悪い準最適なアドバイスがなされた場合、私はその人を正す権利があります。あなたは、今の状況に関して、悪いアドバイスをしています。

あなたのスレッドを、よく読んで、その投稿と返信先のニックネームを関連付けてください。

要するに、場所が悪いんですね。

 
Renat Akhtyamov:

が、何の意味があるのでしょうか?この場合、何が問題なのか、つまり、あなたのコードがこのようになる場合、あなたの経験を教えてください。

int i;
for( i = 0; i < x; i++ )
{
}
for( i = 0; i < x; i++ )
{
}
...

ループの外側でカウンターを初期化すると、そのスコープがループの外まで広がってしまうので、通常は必要ありません。例えば、コードの後半で変数jを用意し、誤ってそれをiと呼んでしまった場合などです。あるいは、インデックス[1]の代わりに[i]と書く、など。

そのため、変数はできるだけ最初に使われる場所の近くで初期化し、グローバル変 数を大量に持たないようにする必要があります。これにより、起こりうるエラーのリストを減らすことができます。

 
Alexey Kozitsyn:

ループの外側でカウンターを初期化すると、そのスコープがループの外まで広がるが、これは通常必要ない。例えば、コードの後半で変数jを指定し、誤ってそれをiと呼んでしまった場合などです。あるいは、インデックス[1]の代わりに[i]と書く、など。

そのため、変数はできるだけ最初に使われる場所の近くで初期化し、グローバル変 数を大量に持たないようにする必要があります。これにより、起こりうるエラーのリストを減らすことができます。

これと(...)がどう関係するんだ?

憤慨しています。

i=0とi++と書いてあれば?

では、私のために別のループに変えてください。

動作しない

 
Renat Akhtyamov:

それがどうしたんだ?

出てきました。

どこにいても、何にいても、それはあなたの権利です。説明しろと言われたので、説明しました。
 
Alexey Kozitsyn:
どこにいても、何にいても、それはあなたの権利です。説明しろと言われたので、説明しました。

ここで考慮すべきは、ループブロックの後、iはすでにxと等しく、ループの中でi<xであれば

for(...){}の後のArray[i]は配列のオーバーランエラーを返して終わりです