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








