编译器是否能够优化意大利面条代码?

Kug*_*uBu 4 c c++ gcc

我正在编写一个最终生成C++代码的编译器,我无法使用while\for或任何其他正常循环,所以我将它转换为goto\if和assigments\call行如下:

if (i<b) goto loop_959__again;
loop_959__end: ;
}
{
int inumber;
int i;
i=0;
inumber=3;
if (!(inumber<30)) goto loop_4482__end;
loop_4482__again:
float fnumber;
_A1__main__increase(__owner);
i++;
inumber++;
fnumber=3;
loop_4482__step_begin:
if (inumber<30) goto loop_4482__again;
loop_4482__end: ;
}
Run Code Online (Sandbox Code Playgroud)

这看起来真的很痛苦,但是GCC编译器可以编译和优化上面的代码,好像它包含普通循环等吗?

Mar*_* A. 10

编译器通过流程图分析优化程序控制流程,从编译器的角度来看,使用该级别gotoif分支实际上是等效的.

需要注意的一点是:gotos如果您的生成器生成不可简化的控制流图,那么几乎可以在函数中的任何位置跳转,这可能肯定会影响编译器的优化功能.