两个版本的简单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 ++ -x c -S -masm = intel -fverbose-asm -l -c test.c
在BOTH版本中我得到了相同的代码:
_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和阵列的顺序不同? 非常感谢您的帮助。
答案 0 :(得分:1)
没有为什么。编译器可以根据需要对局部变量进行排序。您声明它们的顺序与任何事情无关。