昆明世博园2017年门票:while(1)与for(;;)的区别?

来源:百度文库 编辑:中科新闻网 时间:2024/03/29 02:21:26
两个都是死循环,它们的汇编代码有什么不同?

对,同意楼上的。
我在VC++下做过实验,经编译器优化后的汇编代码是一样的,都是一个简单的跳转指令:JMP **
相同的情况还有很多,例如这个:
for (int i=0;i<1000;i++)
{
//循环体里什么都没有;
};

得到的程序代码里将找不到对应的机器码,因为编译器自动将他们优化掉了。
如果真是想不被优化掉的话,循环体写上这个 :
_asm nop
nop就是汇编的NOP啊,你应该知道的,呵呵
就出现对应代码了。

根据不同的编译器,产生的汇编代码有可能不太一致,但是如果打开编译器优化选项,则几乎所有的编译器都会编译出同样的代码。

读起来感觉不一样,在不同语意中代码质量就有高低(BadSmell),如果你的代码需要做审核就可以感觉到

变成汇编的差别,不必去考虑了,可以忽略

while(1)永远为真,没有退出条件当然是死循环。