是"} while(0);" 总是等于"break;} while(1);"?

Her*_*che 4 c c++ break while-loop do-while

我比较了gcc汇编程序的输出

do{ 

//some code 

}while(0);
Run Code Online (Sandbox Code Playgroud)

do{

//some code

 break; 
}while(1);
Run Code Online (Sandbox Code Playgroud)

输出是相等的,有或没有优化,但..

一直都是这样吗?

没有实验可以证明理论,它们只能证明它们是错误的

Gia*_*nni 18

有一点点差异:

do {
  // code
  if ( condition )
    continue;
  // code
  break;
} while(1);
Run Code Online (Sandbox Code Playgroud)

condition为true 时将重新启动循环,而在} while(0);版本中,continue将等效于break.

如果不continue存在,则它们应该生成完全相同的代码.


Sea*_*ean 5

表格不相同.这是一个无限循环:

do {
    continue;
    break;
} while (1);
Run Code Online (Sandbox Code Playgroud)

这不是:

do {
    continue;
} while (0);
Run Code Online (Sandbox Code Playgroud)