Iは、次のCコードのために最適化されていないコードを生成した:GCCで自動変数はどのように初期化されますか?それらは0であることが保証されていますか?
#include<stdio.h>
int main(){
int i;
printf("%d\n", i);
}
と生成されたコードは次のとおり
.file "test.c"
.section .rodata
.LC0:
.string "%d\n"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl -4(%rbp), %eax
movl %eax, %esi
movl $.LC0, %edi
movl $0, %eax
call printf
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4"
.section .note.GNU-stack,"",@progbits
は、上記アセンブリコードの実行は出力として0を与えます。 私の質問は、変数i
はどのように0
に初期化されていますか?
「i」は配列ではありません。それは特定の値に初期化されていません。 –
未定義です。 – MrTux
[静的でない変数の初期化]の可能な複製(http://stackoverflow.com/questions/8743445/non-static-variable-initialization) – MrTux