在C / C ++语言中...... for
循环内部编译为while
循环?
答案 0 :(得分:5)
是的,通常,基本上。一个for循环,写成
for (a; b; c) { ... }
可以改写为
a;
while (b) { ...; c; }
请注意,这并未考虑范围限制和此类问题,因为当您将for转换为while时,无法使用C ++语法精确编写范围。
然而,在下面,for循环实际上是一系列语句和(条件)gotos:
{
a;
goto test;
body:
...;
c;
test:
if (b) goto body:
}
除了所有它都在汇编代码中。
答案 1 :(得分:2)
我想你可以这样想:
下式给出:
for (initialization; condition; updater) { body; }
它生成这个模拟:
{
initialization;
while (condition)
{
... // body
updater;
}
}
但重要的是要注意一些事情:
continue
通过自己的更新代码。即您有责任确保您的更新程序是否运行 - 但编译器会强制执行for循环。答案 2 :(得分:2)
由编译器决定如何将循环生成到汇编中。一般来说,如果我手动编写循环代码,它们在程序集中会略有不同。这些优化可能对您的代码来说很小,但如果需要,您可以节省额外的负载/存储。但是你的循环条件(如果它们是计数器)最有可能都是在寄存器中完成的算术运算。
检查你的程序集(如果你正在使用gcc / g ++)试试这个:
gcc -S -o your_asm_file.s your_src.c
然后查看*.s
文件。这正是您的编译器正在编写的机器代码。
答案 3 :(得分:2)
发布完整性:
for (a; b; c) d;
相当于:
{
a;
while(b)
{
{
d;
}
c;
}
}