int main()とint main(void)
目覚めたと同時に
int main(){}とint main(void){}は
アセンブラ的にみると違うのかという
謎な感じの疑問が降りてきた
— tsun (@No___Op) August 29, 2015
ウソです。なんか寝る前に考えていて朝目覚めてすぐ行動したという感じ。
プログラミングのテストでint main()で書いていて点数が下がったので
えっ...と思っていた
そんなにgdb使ってないんだよな
コマンド忘れた
— tsun (@No___Op) August 29, 2015
らしいのでgdbの使い方も含めて確かめてみよう.
まず簡単にハローする
//hello.c
int main(){
printf("Hello World!\n");
return 0;
}
//hello_void.c
#include<stdio.h>
int main(void){
printf("Hello World!\n");
return 0;
}
次にコンパイル
gcc -g -o h1 hello.c
gcc -g -o h2 hello_void.c
-gオプションを付けることでデバッグ情報が付加されますね
次はいよいよgdbの出番です
お好みでintel記法かAT&T記法か選んでください。デフォルトだとAT&T
intel記法に修正したい時はコレ from ももテク
さて
gdb -q h1
Reading symbols from void...done.
(gdb)disas main
Dump of assembler code for function main:
0x000000000040052d <+0>: push %rbp
0x000000000040052e <+1>: mov %rsp,%rbp
0x0000000000400531 <+4>: mov $0x4005d4,%edi
0x0000000000400536 <+9>: callq 0x400410 <puts@plt>
0x000000000040053b <+14>: mov $0x0,%eax
0x0000000000400540 <+19>: pop %rbp
0x0000000000400541 <+20>: retq
End of assembler dump.
もう一方の(void)の方を見てみましょう
Reading symbols from void...done.
(gdb)disas main
Dump of assembler code for function main:
0x000000000040052d <+0>: push %rbp
0x000000000040052e <+1>: mov %rsp,%rbp
0x0000000000400531 <+4>: mov $0x4005d4,%edi
0x0000000000400536 <+9>: callq 0x400410 <puts@plt>
0x000000000040053b <+14>: mov $0x0,%eax
0x0000000000400540 <+19>: pop %rbp
0x0000000000400541 <+20>: retq
End of assembler dump.
なんと同じなんですねーww
先生に反論できる!できるぞ!!
つ[ http://qiita.com/raccy/items/b59bd7fa9f4eacabca79 ]
なんとc++だと上の二つは一緒ということなのですが
cだと違うそうなんです.(死)
テストの点数が上がらないことがわかったのでジ・エンド
-参考-