エラー、バグ、質問 - ページ 2889 1...288228832884288528862887288828892890289128922893289428952896...3185 新しいコメント Roman 2020.10.27 15:36 #28881 A100:あなたは乱数0、私は540016640です。が、乱数であることに変わりはない。 MQはゼロになったんじゃなかったっけ? Valeriy Yastremskiy 2020.10.27 15:42 #28882 Roman:あのMQはゼロになったんじゃなかったっけ? グローバル 変数はゼロで初期化されているようですが、最初のパスで関数本体で異なる初期化をしているのを見たことがあります。使う前に必ず初期化するようにしています。そうはいっても、行動は曖昧であってはならない。 そして、ループ本体の括弧の中にある別の宣言が、その変数をループのローカル変数にする。ドキュメントにないだけです。 A100 2020.10.27 15:43 #28883 Roman:また、コンパイラはその変数が初期化されていないことを警告 しません。 Print(...) は、パラメータが 定数でない参照で渡さ れた場合のように警告しないことがある int f( int& i ) { return i; } void OnStart() { int i; f( i ); //нормально } Alexey Viktorov 2020.10.27 15:48 #28884 A100:ループが同じなら、コンパイラの動作も同じはずなのに、違っているのです。ここに間違いがあるのです。(1)で 警告がある理由を説明し、(2)で警告がない理由を説明してください。原理的に何が変わったのでしょうか?それから、初期化されていない変数が使われている場合、なぜコードを実行すると最終結果が正しくなるのでしょうか?そんな科学、ロジックが あるのです。AとBが同じでAが赤なら、Bも赤で なければならず、緑で あってはならない 私はプログラミングを勉強したわけではないので、ワシリー・イワノビッチやペトカが論理的に推測したように、論理的に推測するしかないのです。 最初のケースでは、文字列全体が実行されます for ( int i = 0, j; i < 10; i = j ) で,ここではj 変数は初期化さ れず,その値が i 変数に代入されています. 2つ目のケースでは、j変数が初期化されて いないにもかかわらず、それが使われている次の行では、その値が代入されているのではなく、その値が代入されているのです。つまり、j変数はi変数の値で初期化されます 以下は、警告を表示しないバリエーションです。 for(int i = 0, j; i < 10; j = i) { j = i+1; } A100 2020.10.27 16:01 #28885 Alexey Viktorov:私はプログラマーになるために勉強した わけではなく、ワシリー・イワノビッチやペトカが論理学について推測したように、論理的に推測することしかできないのです。最初のケースでは、文字列全体が実行されますで,ここではj 変数は初期化さ れず,その値が i 変数に代入されています. そして、誰がそれを研究したのか?ここにいる人たちは(私もそうですが)独学でやっている人が多いと思います。 一連の動作を理解するためには、for ループ演算子を勉強する必要があります。(1)において、j変数にはi+1の値が代入される j = i+1 代入演算子の右側に表示される前に i = j Roman 2020.10.27 16:02 #28886 Valeriy Yastremskiy:グローバル 変数はゼロで初期化されているようですが、関数本体は最初のパスで異なる初期化に遭遇しています。 私はいつも使用前に初期化するようにしています。そうではあるが、行動は曖昧であってはならない。そして、ループ本体の括弧の中にある別の宣言が、その変数をループのローカル変数にする。ドコモは持っていないだけ。 そうですね、私も必ず変数を初期化します、二度手間みたいで、いつも忘れないようにしないと いけませんね。 Got it into my head from C language )) つまり、この例のように初期化されていない変数を使ったループは悪しき習慣なのです。 A100 2020.10.27 16:11 #28887 Roman:そうですね、私も必ず変数を初期化します。2×2のようなもので、常に覚えておかなければ なりませんね。 Got it into my head from C language )) つまり、この例のように初期化されていない変数を使ったループは悪しき習慣なのです。 初期化が必要ですが、意味のある値であれば大丈夫です。上記の例ではそのような値はないので、悪いやり方ではなく、唯一可能な方法です。そうでなければ、二重の初期化が発生します int f( int i ) { /*вычисления*/ } void g( int k ) { for ( int i = 0, j; i < k; i = j ) { j = f( i ); /*вычисления*/ } } Roman 2020.10.27 16:34 #28888 A100:初期化するが、意味のある値のみとする。上記の例ではそのような値はないので、練習は悪くない、それしかありえない。そうでなければ、二重の初期化が発生します。 を初期化したら何が変わるんだろう? int f( int i ) { /*вычисления*/ } void g( int k ) { for ( int i=0, j=0; i < k; i = j ) { j = f( i ); /*вычисления*/ } } A100 2020.10.27 16:47 #28889 Roman:j=333で初期化すると何が変わるのでしょうか? また、なぜj=333ではなく0なのでしょうか?つまり、見つけにくいエラーを隠すための無意味な初期化です Roman 2020.10.27 16:49 #28890 A100:なぜ333ではなくゼロなのか、というと。つまり、意味のない初期化であるため、捕捉しにくいエラーが隠されている可能性があります。 この値のエラーをキャッチする必要がある場合は、まあ、333で初期化してください )) ただの開始値です。 1...288228832884288528862887288828892890289128922893289428952896...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
あなたは乱数0、私は540016640です。
が、乱数であることに変わりはない。
MQはゼロになったんじゃなかったっけ?
あのMQはゼロになったんじゃなかったっけ?
グローバル 変数はゼロで初期化されているようですが、最初のパスで関数本体で異なる初期化をしているのを見たことがあります。使う前に必ず初期化するようにしています。そうはいっても、行動は曖昧であってはならない。
そして、ループ本体の括弧の中にある別の宣言が、その変数をループのローカル変数にする。ドキュメントにないだけです。
また、コンパイラはその変数が初期化されていないことを警告 しません。
Print(...) は、パラメータが 定数でない参照で渡さ れた場合のように警告しないことがある
ループが同じなら、コンパイラの動作も同じはずなのに、違っているのです。ここに間違いがあるのです。(1)で 警告がある理由を説明し、(2)で警告がない理由を説明してください。原理的に何が変わったのでしょうか?それから、初期化されていない変数が使われている場合、なぜコードを実行すると最終結果が正しくなるのでしょうか?
そんな科学、ロジックが あるのです。AとBが同じでAが赤なら、Bも赤で なければならず、緑で あってはならない
私はプログラミングを勉強したわけではないので、ワシリー・イワノビッチやペトカが論理的に推測したように、論理的に推測するしかないのです。
最初のケースでは、文字列全体が実行されます
で,ここではj 変数は初期化さ れず,その値が i 変数に代入されています.
2つ目のケースでは、j変数が初期化されて いないにもかかわらず、それが使われている次の行では、その値が代入されているのではなく、その値が代入されているのです。つまり、j変数はi変数の値で初期化されます
以下は、警告を表示しないバリエーションです。
私はプログラマーになるために勉強した わけではなく、ワシリー・イワノビッチやペトカが論理学について推測したように、論理的に推測することしかできないのです。
最初のケースでは、文字列全体が実行されます
で,ここではj 変数は初期化さ れず,その値が i 変数に代入されています.
そして、誰がそれを研究したのか?ここにいる人たちは(私もそうですが)独学でやっている人が多いと思います。
一連の動作を理解するためには、for ループ演算子を勉強する必要があります。(1)において、j変数にはi+1の値が代入される
j = i+1代入演算子の右側に表示される前に
グローバル 変数はゼロで初期化されているようですが、関数本体は最初のパスで異なる初期化に遭遇しています。
私はいつも使用前に初期化するようにしています。そうではあるが、行動は曖昧であってはならない。
そして、ループ本体の括弧の中にある別の宣言が、その変数をループのローカル変数にする。ドコモは持っていないだけ。
そうですね、私も必ず変数を初期化します、二度手間みたいで、いつも忘れないようにしないと いけませんね。
Got it into my head from C language ))
つまり、この例のように初期化されていない変数を使ったループは悪しき習慣なのです。
そうですね、私も必ず変数を初期化します。2×2のようなもので、常に覚えておかなければ なりませんね。
Got it into my head from C language ))
つまり、この例のように初期化されていない変数を使ったループは悪しき習慣なのです。
初期化が必要ですが、意味のある値であれば大丈夫です。上記の例ではそのような値はないので、悪いやり方ではなく、唯一可能な方法です。そうでなければ、二重の初期化が発生します
初期化するが、意味のある値のみとする。上記の例ではそのような値はないので、練習は悪くない、それしかありえない。そうでなければ、二重の初期化が発生します。
を初期化したら何が変わるんだろう?
j=333で初期化すると何が変わるのでしょうか?
また、なぜj=333ではなく0なのでしょうか?つまり、見つけにくいエラーを隠すための無意味な初期化です
なぜ333ではなくゼロなのか、というと。つまり、意味のない初期化であるため、捕捉しにくいエラーが隠されている可能性があります。
この値のエラーをキャッチする必要がある場合は、まあ、333で初期化してください ))
ただの開始値です。