-1

两个版本的简单 C 代码:

int main(){

    int array[4];
    int i=0;
    array[4]=0;
}

int main(){
    int i=0;
    int array[4];

    array[4]=0;
}

我像这样用 g++ 编译:g++ -xc -S -masm=intel -fverbose-asm -l -c test.c

在两个版本中,我得到了相同的汇编代码:

_main:
LFB0:
    .cfi_startproc
    push    ebp  #
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    mov ebp, esp     #,
    .cfi_def_cfa_register 5
    and esp, -16     #,
    sub esp, 32  #,
    call    ___main  #
    mov DWORD PTR [esp+28], 0    # i,
    mov DWORD PTR [esp+28], 0    # array,
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
LFE0:

有人可以解释为什么吗?我的意思是 i 和 array 的顺序不应该不同吗?非常感谢您的帮助。

4

1 回答 1

1

没有理由被拥有。编译器可以根据需要对局部变量进行排序。您声明它们的顺序与任何事情无关。

于 2013-09-06T23:35:47.060 回答