编译器是否允许消除无限循环?可以优化编译器删除无限循环,这不会改变任何数据,如while(1)
/* noop */;从分析编译器可以推导出的数据流图,这样的循环是“死代码”而没有任何副作用。是否删除了C90 / C99标准禁止的无限循环?C90或C99标准是否允许编译器删除此类循环?更新:“Microsoft C版本6.0基本上做了这个优化。”,请参阅caf的链接。label: goto label;return 0;将转变为return 0;
3 回答
繁星coding
TA贡献1797条经验 获得超4个赞
循环不是死代码,它基本上阻止程序达到它后面的任何东西。如果删除循环,则不会发生这种情况,因此编译器无法删除循环。
它可能会用平台相关的空闲指令替换它,以通知处理器线程不再执行任何操作。
编译器可以做的是删除循环后出现的任何代码,因为它无法访问并且永远不会被执行。
- 3 回答
- 0 关注
- 684 浏览
添加回答
举报
0/150
提交
取消