c – 是“for(;;)”无限循环的成语正确归因于PDP-11 C编译器?

c – 是“for(;;)”无限循环的成语正确归因于PDP-11 C编译器?,第1张

概述最近我发现 this article声称,为了(1)无限循环,偏好(;;)的想法是因为最初在PDP-11上可用的C编译器为(1)生成了一个额外的机器指令. Btw现在甚至Visual C警告tend to favor the former. 这种归因于(;;)成语的现实意义如何? 这是V7 Unix编译器cc生成的(使用 SIMH和 TUHS的映像): $cat>a.cmain(){ whil 最近我发现 this article声称,为了(1)无限循环,偏好(;;)的想法是因为最初在PDP-11上可用的C编译器为(1)生成了一个额外的机器指令.

Btw现在甚至Visual C警告tend to favor the former.

这种归因于(;;)成语的现实意义如何?

解决方法 这是V7 Unix编译器cc生成的(使用 SIMH和 TUHS的映像):
$cat>a.cmain(){ while(1);}$cat>b.cmain(){ for(;;);}$cc -S a.c$cc -S b.c

a.c(while)编译为:

.globl  _main.text_main:~~main:Jsr     r5,csvjbr     L1L2:L4:tst       jeq     L5jbr     L4L5:L3:jmp       cretL1:jbr  L2.globl.data

而b.c(for)变为:

.globl  _main.text_main:~~main:Jsr     r5,csvjbr     L1L2:L4:jbr       L4L5:L3:jmp       cretL1:jbr  L2.globl.data

所以至少在(但是,当使用-O编译时,两个程序都会产生完全相同的程序集:

.globl  _main.text_main:~~main:Jsr     r5,csvL4:jbr  L4.globl.data

当我添加一个循环体的printf(“Hello”);程序仍然是一样的.

所以,这个成语可能源于PDP-11机器语言,但到了1979年,这个差异已经在很大程度上是无关紧要的.

总结

以上是内存溢出为你收集整理的c – 是“for(;;)”无限循环的成语正确归因于PDP-11 C编译器?全部内容,希望文章能够帮你解决c – 是“for(;;)”无限循环的成语正确归因于PDP-11 C编译器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1249994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存