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
まあたしかに「代入」されてないような。
[ツッコミを入れる]