Mar*_*ers 47
我更喜欢for(;;)
因为它没有测试任何东西而且在语义上这就是你的意思.如果1为真,那么继续测试没有多大意义.但是,任何专业的C程序员都应该立即识别这两个惯用语.
就实际表现而言,应该没有区别.编译器将优化测试.
我试过测试两者看哪个更快但它们都没有完成.
Eli*_*sky 18
在任何普通的编译器中,应该绝对没有区别.例如,这是LLVM-clang
生成(带有-O3
标志)的内容while (1) {}
:
.file "test.c"
.text
.globl main
.align 16, 0x90
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
.align 16, 0x90
.LBB0_1:
jmp .LBB0_1
Run Code Online (Sandbox Code Playgroud)
注意jmp .LBB0_1
部分,这是实际的无限循环.对于for (;;)
那种,它生成完全相同的代码.
您也可以尝试与其他编译器一起玩,但最好不要担心它.
好的,我只需要尝试一下gcc
:
.file "test.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
.L2:
jmp .L2
Run Code Online (Sandbox Code Playgroud)