2 weixin 32743397 weixin_32743397 于 2016.03.01 23:41 提问

gcc下为什么while要被翻译成if do while

csapp200页的一个问题 说是while loop翻译到汇编就变成ifdowhile的形式了 要是不用ifdowhile直接这样写我觉得效率上没什么不同啊
loop:
t=test_expr;
If(!t) goto done;
body_statement
goto loop;
done:图片

3个回答

caozhy
caozhy   Ds   Rxr 2016.03.01 23:45

gcc把代码翻译成机器代码了,无所谓什么while还是if do while
但是你从相同的汇编代码看不出原始代码用的是什么,所以反编译程序在反编译的时候反回来可能和你原始的写法不同。

enpterexpress
enpterexpress   Rxr 2016.03.02 11:51

难道没有解释吗,你看的

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 14:18

do ... while, if...do...while 都是做同一件事了:判断条件,根据条件决定是否执行循环体。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
do....while(0),编译器会自动优化
do{....}while(0) #define foo(params) /do{ /    //instructions /}while(0) 为什么要用其do...while(0)的根本愿意在于你的#define 中超过两条表达式(包括两条)以上,下面的例子如果你的#define只有一条,那do...while(0)就没有意义了~~ if(x = 1) 
IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)
IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式)
关于 do ....while() 的重要用法
关于 do ....while() 的重要用法     在实际的编程练习中循环语句的使用频率是:for >while() >do....while()     当然推荐使用的也是上面的顺序,但是在有的地方 do....while() 用的却不是循环     的功能了,比如说:     do     {                               }while(
关于do{...}while(FALSE);
今天看MFC的代码,无意中发现这样一种用法,当时觉得都
do{}while(false);在java中的妙用.
在以前写C程序中经常会有这样的情景.   打开一个资源的句柄.   在打开的这个资源上操作进行多次操作,每一步失败都要关闭这个资源句柄并摧毁它: if(x1) { close(hd);destory(hd);} if(x2) { close(hd);destory(hd);} if(x3) { close(hd);destory(hd);} 等等,如果操作超过3条语句,比如有七八条
do while 循环和while循环的区别
do while 循环和while循环的区别 1、do while循环是先执行循环体,然后判断循环条件,如果为真,则执行下一步循环,否则终止循环;    while循环是先判断循环条件,如果条件为真则执行循环体; 2、do while循环条件后面必须有一个分号,这个分号表明循环结束。
if和switch语句、循环语句while和do……while、for
一、if和switch的应用区别 if: 1、对具体的值进行判断 2、对区间进行判断 3、对运算结果是boolean类型的表达式进行判断 switch: 1、对具体值进行判断 2、值得个数通常是固定的 对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载到内存。 效率相对高一点 2、do……while语句至少执行一次,且while后边
do{}while(false)
本小节不是很适于没有多少实际编程经历的初学者,所以初学者可以跳过,以后再回头阅读。当然,所谓的“高级用法”的确是应该加对引号的,所谈的内容只是一个高手们常用小小技巧。   使用do...break...while简化多级条件判断的结构。   如果你写过不少代码,那么一定会不时遇到类似下的情况: 假设要找到文件A,复制该文件为B;然后打开B文件,然后往B文件内写入一些内容;最后在
do{...}while(0)的用法
do{...}while(0) 的妙用 1.导引: 第一次见到 do{...}while(0)是在学习libevent的时候,看到里面有很多类似 #define TT_URI(want) do { \ char *ret = evhttp_uri_join(uri, url_tmp, sizeof(url_tmp)); \ tt_want(ret != NULL);
PHP do while 详解
$num = 1; do { echo $num.''; $num++; if($num == 8) { echo "i is not big enough"; break; } } while (1); 其中 $num = 1 为基础 值 do中是必须执行的内容,最少执行一次, 如果里面增加了 一些判断 如果满足条件 就用 break;跳出来 最后的while