可以优化编译器删除无限循环,这不会改变任何数据,如
while(1)
/* noop */;
Run Code Online (Sandbox Code Playgroud)
从分析编译器可以推导出的数据流图,这样的循环是"死代码"而没有任何副作用.
是否删除了C90/C99标准禁止的无限循环?
C90或C99标准是否允许编译器删除此类循环?
更新:"Microsoft C版本6.0基本上做了这个优化.",请参阅caf的链接.
label: goto label;
return 0;
Run Code Online (Sandbox Code Playgroud)
将转变为
return 0;
Run Code Online (Sandbox Code Playgroud) c compiler-construction optimization standards infinite-loop