在C/ c++语言…for循环在内部编译为While循环
In C/C++ Language... are for loop internally compile as While loop?
In C/c++ Language…for
循环内部编译为while
循环?
是的,通常,基本上。for循环,写为
for (a; b; c) { ... }
可以重写为
a;
while (b) { ...; c; }
注意,这并没有考虑作用域等问题,因为当你将for转换为while时,作用域不能用c++语法精确地写出来。
然而,在下面,for循环实际上是一系列语句和(有条件的)goto:
{
a;
goto test;
body:
...;
c;
test:
if (b) goto body:
}
我想你可以这样想:
给定:
for (initialization; condition; updater) { body; }
生成如下模拟:
{
initialization;
while (condition)
{
... // body
updater;
}
}
但是注意一些事情很重要:
- 初始化是内部作用域的一部分。所以如果你声明了一个变量,它不会在for循环之外转义。
- 不能跳过更新程序代码(除非跳出for循环)。这与while()循环不同,在while()循环中,您可以通过自己的更新代码来
continue
。也就是说,你有责任确保你的更新程序是否运行-但编译器强制它用于for循环。
如何将循环生成程序集实际上取决于编译器。一般来说,如果我手工编写for循环,它们在程序集中看起来会略有不同。这些优化对于您的代码来说可能是次要的,但如果有必要,您可以节省额外的加载/存储。但是你的循环条件(如果它们是计数器)很可能都是在寄存器中完成的算术运算。
检查你的程序集(如果你使用的是gcc/g++):
gcc -S -o your_asm_file.s your_src.c
然后查看*.s
文件的内部。
完整发布:
for (a; b; c) d;
等价于:
{
a;
while(b)
{
{
d;
}
c;
}
}
相关文章:
- 循环在计数器中不起作用
- 如何用for循环在c++中生成单词三角形
- 虽然循环在使用回车键时不退出程序
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- 如何在公共头文件中向库的用户公开枚举,同时在内部使用它?
- std::strlen 在内部是如何工作的?
- STRCMP内部IF在内部不起作用
- For 循环在尝试读取数组 c++ 时程序崩溃
- "std::string"是否将其字符作为签名字符在内部存储?
- 是什么导致我的循环在第一次迭代中运行得更慢
- C++ 继承向量问题(无限循环+在其他类中使用向量的问题)
- 如何使这个 Foor 循环在这个问题中工作?
- 当我返回内部时,循环在C 中不起作用
- 仅执行一次函数一次内部循环,该循环在每个0.1秒C 处都被调用
- 在 c++ 中,c 为什么 for 循环块内部和 for 循环内的条件行为不同?
- 为C++中的循环在内部定义的局部变量
- c ++如何在内部循环中使用带有自动的矢量擦除对象
- 防止代码重复:两个长函数仅在内部循环中不同
- 如何在内部使用while循环
- 在C/ c++语言…for循环在内部编译为While循环