C++ 编译器能够优化意大利面代码吗?

C++ 编译器能够优化意大利面代码吗?,c++,c,gcc,C++,C,Gcc,我编写一个编译器,在结尾生成C++代码,我不能使用而< >或其他任何正常循环,因此我将其转换成 Goto \如果和Asigigs'这样的调用线: 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

我编写一个编译器,在结尾生成C++代码,我不能使用<代码>而< <代码> >或其他任何正常循环,因此我将其转换成<代码> Goto \如果和Asigigs'这样的调用线:

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: ;
}

if(i编译器使用流图分析优化程序控制流,在该级别使用
goto
而不是
if
分支,从编译器的角度来看,实际上是等效的


需要注意的一点是:由于
gotos
几乎可以在函数中的任何地方跳跃,如果生成器生成,这肯定会影响编译器的优化功能。

当然可以,我只希望永远不会从人的角度读取eye@MarcoA.我想等我有时间的时候,我可能会看看这段代码代码生成中的错误。:'(但这有源代码吗?这对这个项目来说非常重要。或者这对源代码来说太琐碎了?我试着想一种方法来检查它,但很困惑。对不起,我没有得到你以前的语句检查它。使用和不使用优化标志编译它,检查是否汇编代码在优化编译中更短。为什么猜测?Com将其堆叠到部件(启用适当的优化选项),并检查汇编代码。我记得在某个地方读到,
goto
s可以使特定行是否被执行的问题变得不可判定。我错了吗?关于
不可约控制流图,我可以从哪里得到一个示例?这将有助于避免做什么。@kugbu在任何编译器的构造书中或谷歌搜索讲座。如果你对这件事感兴趣,我还建议你看看LLVM的源代码(搜索CFG分析模块)@MarcoA。没关系,我在实际文章中找到了一篇,对不起。@PatrickCollins我记得某个地方的一篇论文,可能在saarland.de()上深入研究了这个问题。我会看看是否能找到它