C/C++言語で... for
ループは内部でwhile
ループとコンパイルされていますか?C/C++言語では... forループはWhileループとして内部的にコンパイルされますか?
答えて
はい、通常、基本的には、ループのため、
あなたはしばらくのために翻訳したときに、スコーピングは、」可能性があるため、これは、アカウントのスコープと、このような問題になりませんのでご注意
a;
while (b) { ...; c; }
のように書き換えることができ
for (a; b; c) { ... }
を書かC++の構文で正確に記述することができます。
しかし、下に、ループの実際の文と(条件)GOTOSの系列である:
{
a;
goto test;
body:
...;
c;
test:
if (b) goto body:
}
そのすべてはアセンブリコードであることを除いて。
ループでより多くのブレースを使用できます。 'a'の範囲はループの中にあり、' c'はいくつかの中括弧で区切られていると私は信じています。 – Pubby
@Pubbyはい、私はその効果にコメントを追加しました。しかし、それらの周りに{}を追加すると、実際には同じではありません。それは、それが実際のものであるだけでなく、2つのスコープを作成するためです。私はそれが正しく書かれているとは思わない。 –
私はあなたがこのように考えることができたとします。与えられた
:
for (initialization; condition; updater) { body; }
それは、このアナログ生成:
{
initialization;
while (condition)
{
... // body
updater;
}
}
をしかし、それはいくつかのことを注意することが重要です。
- 初期化はiの一部です範囲内のスコープ。したがって、変数を宣言すると、forループの外側にエスケープされません。
- アップデータコードをスキップすることはできません(forループから抜け出すことを除いて)。これは、while()ループとは異なり、
continue
あなた自身の更新コードを通り過ぎる可能性があります。私。あなたはアップデータが実行されているかどうかを確認する責任がありますが、コンパイラはそれをforループのために強制します。
ポイント2の寄与分+1。微妙な違いがありますが、それは私にはあまり重要ではありません。 – JohnB
ループがアセンブリにどのように生成されるかは、実際にはコンパイラによって異なります。一般に、手作業でループを手作業でコーディングすると、アセンブリでは少し違って見えます。これらの最適化はおそらくあなたのコードにとってはマイナーですが、必要に応じて余分な負荷やストアを節約することができます。しかし、ループ条件(カウンタの場合)は、いずれもレジスタで算術演算が行われる可能性が最も高いです。これを試してみてください(あなたが++のgcc/gのを使用している場合)
はあなたの組み立てを確認するには:gcc -S -o your_asm_file.s your_src.c
はその後*.s
ファイル内部を見てみましょう。これはまさにコンパイラがマシンコードを扱っているところです。完全性について
投稿:
for (a; b; c) d;
は同等です:
{
a;
while(b)
{
{
d;
}
c;
}
}
- 1. forループはwhileループ内では実行されません。
- 2. Cinはwhileループとforループで無視されています
- 3. for-whileループを持つプログラミング言語はありますか?
- 4. forループ内のDo-whileループ
- 5. forループとwhileループ
- 6. forループwhileループforループ
- 7. whileループのJava言語ですか?
- 8. Whileループin Kotlinプログラミング言語
- 9. forループ内のwhileループは動作しません
- 10. PHP forループからwhileループ
- 11. Forループ対Whileループ
- 12. HTML内部whileループ
- 13. Whileループforネストしたループ
- 14. whileループの外で宣言された変数は、スカラのwhileループの内側ではアクセスできません。
- 15. Forループ内のJava - 2-Do-Whileループ
- 16. forループとwhileループの違いは何ですか?
- 17. do-whileループはC言語で終了しません
- 18. forループとwhileループ内の変数の割り当て
- 19. if文をwhileループまたはforループにするには?
- 20. は、whileループ内
- 21. Forループ用While
- 22. MYSQL For/Whileループ
- 23. このケースではForループとWhileループの違いはありますか?
- 24. リスト内のn番目の範囲をforループとwhileループでスライスします
- 25. 内部for..inループ
- 26. forループ内で宣言された変数は、ループのパフォーマンスに影響しますか?
- 27. whileループとforループのプログラミングの問題
- 28. nodejsのwhileループ内でforループを正しく使う方法
- 29. whileループとforループのPythonインデックス問題
- 30. whileループでforループを停止する
同様の質問には、このようなパフォーマンスの違いは何であるとして、求められています。基本的に同じ質問です。 http:// stackoverflow。com/questions/2879145/c-performance-for-while/2879158#2879158 – JohnB
正確な重複はありません。これは特にMS Visual C++について質問し、もう1つの質問はg ++/intelコンパイラについて質問するようです。 – Kev