2013-06-25 :-(
_ 午後
1300 ガジェット
_ [C]C
int a; a = 10; while (a != 10){ a = 10; // もしかしたら代入に失敗するかもしれない } これ実際に見たことあるコードです
— にゃおきゃっと (@nyaocat) May 14, 2013
#include <stdio.h>
int main(int ac, char** av)
{
int a = 10;
while(a != 10)
{
a = 10;
}
return 0;
}
普通に見てみる。
% gcc -S while0.c
.file "while0.c"
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
call ___main
movl $10, 12(%esp)
jmp L2
L3:
movl $10, 12(%esp)
L2:
cmpl $10, 12(%esp)
jne L3
movl $0, %eax
leave
ret
最適化してみる。
% gcc -O3 -S while0.c
.file "while0.c"
.def ___main; .scl 2; .type 32; .endef
.text
.p2align 4,,15
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
call ___main
xorl %eax, %eax
movl %ebp, %esp
popl %ebp
ret
まあたしかに「代入」されてないような。
[ツッコミを入れる]



