ループの後ろで変数を宣言するのか、ループの中で宣言するのか? - ページ 6

 
Georgiy Merts:

個人的には、プログラム中にたくさんの変数が散らばっていて、変数が作られる場所をその都度探さなければならないのが強く嫌なのです。そのため、私は可能な限り、関数の最初にまとめて変数を宣言し、どこで変数が作られたのか、いつ削除されるのかが分かるようにしています。

プログラム中に散らばっている」とはどういう意味ですか? ローカル変数は、それが使われるブロックの中だけで宣言され適用されます。もしそれを探さなければならないとしたら、それはあなたのコードが長すぎて見つからないということです。

関数の最初にすべての変数を宣言するのは、古くて悪いスタイルです。 Strastrup氏でさえ、このような古いC言語の名残を捨てて、適切で信頼できるコード、つまり使用する場所で直接変数を宣言 することを推奨しました。 あなたのアプローチは、たくさんのランダムミスに満ちていることに気づいていません。 変数を何かで初期化していますか? それとも「気楽に」、予測できないコードの動作を掃除しているのでしょうか)か つては、低性能のハードウェアや脆弱なコンパイラのために正当化されていたのかも しれませんが、今は確実にそうではありません。

 
pivalexander:

あなたはいつも本をからかったり、自分を賞賛しているが、問題の本質は、ブッシュの周りに何も理論を言っていない、あなたが理解するであろうそれを読む...メモリとCPU、CPUとメモリ、電源......そこにも使われているんですねー。

それに対して、私の文章の意味を理解する必要がある人たちや、惨めなプログラマーたちは、いつも匙を投げて銀の皿に乗った出来合いの答えを与える必要があり、彼らは何も理解しようとはしないのです。ですから、私のお勧めは、あなたへの返答として書いていますが、ほとんどの場合、あなたのためではなく、自分のスキルを完璧なものにするために学びたい人のために書いています。

熊手を見ただけで、踏んだらどうなるかがわかる人と、物理の初歩的な法則や素子の重さのデータを知っていて、踏まずに結果がわかる人とがいると思うんです。

 
Alexey Navoykov:

Strastrup氏も、このような古いC言語の名残を捨てて、適切で信頼できるコード、すなわち、使用する場所で直接変数を宣言 することを強く勧めています。

imho, bravo!- ローカルスコープで変数を使用する場合、初期化されていない変数にぶつかる可能性は低く、むしろ変数の以前の使用時にあった値にぶつかる可能性が高く、コンパイラは警告を生成せず、そのような小さな厄介者を探すのは面倒です。

被写体やテストによって、まあ、だいたい、5〜7%以上の差は見えないし、次のビルドでの挙動が変わらないということはないでしょう

 
Aleksandr Matveev:

必要な人は、私の文章の意味を理解するでしょうし、哀れなプログラマーは、常に噛んで、大皿に用意された答えを与える必要があり、彼らは何かを理解したいことはありません。したがって、私のお勧めは、あなたに応えて書いているのですが、ほとんどの場合、あなたのためではなく、自分のスキルを完璧なものにするために学びたい人のためのものです。

熊手を見ただけで、それを踏んだらどうなるかをテストする人と、物理の基本法則や要素の重さのデータから、踏まずに結果がわかる人とがいると思います。

私は人々の2つのタイプがあると信じて - 誇張された傲慢さを持つもの、あなたの自尊心を楽しませるために来た人、彼らは主題にここに本当に有用なコメントを持っていない、私の意見では、彼らもそれを掘り下げていませんでした...。

といったものがあるのですが...。気にしないでください、どうせあなたじゃないんですから:)

アレクサンドル・マトヴェーエフ

この文章の著者は、プロセッサ、メモリ、コンパイラの仕組みを知らないのでは...と勘ぐってしまう。少なくとも10倍から数百倍は高速化できるはずです。 このようなクソコーダーのせいで、ほとんどの製品は何十ものコアを持つ強力なコンピュータでは耐えられないほど遅く、あなたは少し考えるだけでいいのです...。しかし、「なぜ考えるのか」と思う人もいるでしょう。コード化する必要がある..."

そして、"87年、EC1020とZXスペクトラムを 皮切り"というレベルにとどまっているのではないかという疑惑がありますね。

"Shitcoder "はあなたです。だから600人を雇ったんですね...。

悪気はない

PS: 私のコードをスピードアップしてください、OK、何百倍もではありませんが、少なくとも何十倍もです、コードはこのスレッドの最初の投稿にあります、もちろんあなたがshitcoderでないなら、私のコードのどれでも10倍や100倍にスピードアップできます、さぁ・・・。

 
pivalexander:

威勢がいい人、自尊心を満たすために来る人、2つのタイプがいると思いますが、彼らは本当に役に立つコメントを一つも持っていない、私の意見では、掘り下げてもいない

といったものがあるのですが...。気にしないでください、どうせあなたじゃないんですから :)

そして、"EU1020とZX Spectrumから始まる87"というレベルで、まだ止まっているのではないかという疑念があります。

"Shitcoder "はあなたです。だから600人を雇ったんですね...。

悪気はない

こんなくだらないことを6ページも議論しているなんて、静かに笑ってしまいます ))) フォーラムの劣化は明らかです ))

 
Igor Makanu:

imho, bravo!- ローカルスコープで変数を使用する場合、初期化されていない変数にぶつかる可能性は低く、むしろ変数の以前の使用時にあった値にぶつかる可能性が高く、コンパイラは警告を生成せず、そのような小さな厄介者を探すのは面倒です。

被写体やテストに対して、まあ、だいたい、5〜7%以上の差は見えないし、次のビルドでの挙動が変わらないということはないでしょう

初期化せずにローカル変数を 宣言しても、その値がゼロであることは保証されないことをご存知でしょうか?何しろ、スタック上に作成されるわけですから、何でもありです。

void Func()
{
   int n = 0;// только так
   ....
}
P.S. 私自身、議論の罪に陥っています ))
 
Igor Makanu:

このテーマとテストでは、5-7%の違いしか見られず、次のビルドで動作が変わらないとも限らないので、まあ、たいしたことはありません。

そうですね、まあ理想を言えば、最適化するのは極めて単純な状況なので、全く違いはないはずです。 また、ループ本体を別の関数に入れたとしても、同じになりますね、きっと。しかし、パラノイアックはこの文字列を参照しながら関数にドラッグしなければならず、コードを複雑にしてしまう )
 
Alexey Navoykov:
そうですね、理想を言えば、最適化するのは非常にシンプルな状況なので、全く違いはないはずです。 また、ループ本体を別の関数にしたとしても、同じになるはずですね。しかし、パラノイアックはこの文字列を参照しながら関数にドラッグしなければならず、コードを複雑にしてしまう )

テスト結果は起動ごとに5-15%変動するはずで、風はリアルタイムOSではありません

 
Alexey Volchanskiy:

初期化せずにローカル変数を 宣言しても、その値がゼロであることは保証されないことをご存知でしょうか?何しろ、スタック上に作成されたものですから、何でもありです。

P.S.ここで、私は自分自身の議論という罪に陥りました ))

)))))すげえええええええええええええええええええええええ

SZZ:変数宣言時の初期化は、どんなコードでもエラーを最小限に抑えて書くための基本ですが......。は、コンパイラが何かを教えてくれます;)

 
Igor Makanu:

))))), wow!

ZS: 変数宣言時の初期化は、どんなコードでもエラーを最小限に抑えて書くための基本です...。コンパイラもここで何か言うでしょう ;)

コンパイラはローカル変数にも グローバル変数と同じように0を設定すると思っている人たちに会ったことがあるんだ。

そして、コンパイラは何のワラントも出しません

void OnTimer()
{
    string st;
    int n;
    Print(st, n);// специально печатаем неиниализированные, варнингов нет
    for (int i = 0; i < 1000; i++)
    {
        st = IntegerToString(i);
    }
}
理由: