c – 是“for(;;)”无限循环的成语正确归因于PDP-11 C编译器?
发布时间:2020-12-16 05:47:19 所属栏目:百科 来源:网络整理
导读:最近我发现 this article声称,为了(1)无限循环,偏好(;;)的想法是因为最初在PDP-11上可用的C编译器为(1)生成了一个额外的机器指令. Btw现在甚至Visual C警告tend to favor the former. 这种归因于(;;)成语的现实意义如何? 解决方法 这是V7 Unix编译器cc生成
最近我发现
this article声称,为了(1)无限循环,偏好(;;)的想法是因为最初在PDP-11上可用的C编译器为(1)生成了一个额外的机器指令.
Btw现在甚至Visual C警告tend to favor the former. 这种归因于(;;)成语的现实意义如何? 解决方法
这是V7 Unix编译器cc生成的(使用
SIMH和
TUHS的映像):
$cat>a.c main(){ while(1); } $cat>b.c main(){ for(;;); } $cc -S a.c $cc -S b.c a.c(while)编译为: .globl _main .text _main: ~~main: jsr r5,csv jbr L1 L2:L4:tst $1 jeq L5 jbr L4 L5:L3:jmp cret L1:jbr L2 .globl .data 而b.c(for)变为: .globl _main .text _main: ~~main: jsr r5,csv jbr L1 L2:L4:jbr L4 L5:L3:jmp cret L1:jbr L2 .globl .data 所以至少在(但是,当使用-O编译时,两个程序都会产生完全相同的程序集: .globl _main .text _main: ~~main: jsr r5,csv L4:jbr L4 .globl .data 当我添加一个循环体的printf(“Hello”);程序仍然是一样的. 所以,这个成语可能源于PDP-11机器语言,但到了1979年,这个差异已经在很大程度上是无关紧要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |