int main()とint main(void)

ウソです。なんか寝る前に考えていて朝目覚めてすぐ行動したという感じ。

プログラミングのテストでint main()で書いていて点数が下がったので

えっ...と思っていた

らしいので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

 

-ex 'set disassembly-flavor intel' -ex 'disp/i $pc'

intel記法に修正したい時はコレ from ももテク

gdbの使い方のメモ - ももいろテクノロジー

 

さて

 

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だと違うそうなんです.(死)

テストの点数が上がらないことがわかったのでジ・エンド

 

-参考-

inaz2.hatenablog.com

qiita.com