Tag: 标准的

编译器是否允许消除无限循环?

可以优化编译器删除无限循环,这不会改变任何数据,如 while(1) /* noop */; 从分析编译器可以派生的数据stream图来看,这样的循环是“死代码”,没有任何副作用。 删除C90 / C99标准禁止的无限循环? C90或C99标准是否允许编译器删除这样的循环? 更新:“微软C版本6.0本质上做了这种优化。”,见caf链接。 label: goto label; return 0; 将被转化为 return 0;