分類:[C/C++]
2008/08/31(Sun) 22:17:05 編集(投稿者)
いつもお世話になっています。
今回はVCで生成されるアセンブラについて分からないことがありますので訊きます。
アセンブラを調べる事が目的なので、以下の意味のないCプログラムをコマンドラインでコンパイルしました。
※VC2008を使用しました
//対象となるプログラム
void main(void) {
char ch = 0;
int in = 0;
float fl = 0;
double dou = 0;
}
cl ファイル名 /Fas
//生成されたアセンブラ(MASM)
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08
TITLE ファイル名のフルパス
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC __real@0000000000000000
PUBLIC __real@00000000
PUBLIC _main
EXTRN __fltused:DWORD
; COMDAT __real@0000000000000000
; File f:\cの復習\sytemtypes.c
CONST SEGMENT
__real@0000000000000000 DQ 00000000000000000r ; 0
CONST ENDS
; COMDAT __real@00000000
CONST SEGMENT
__real@00000000 DD 000000000r ; 0
; Function compile flags: /Odtp
CONST ENDS
_TEXT SEGMENT
_ch$ = -21 ; size = 1
_fl$ = -20 ; size = 4
_dou$ = -16 ; size = 8
_in$ = -4 ; size = 4
_main PROC
; Line 1
push ebp
mov ebp, esp
sub esp, 24 ; 00000018H
; Line 2
mov BYTE PTR _ch$[ebp], 0
; Line 3
mov DWORD PTR _in$[ebp], 0
; Line 4
fldz
fstp DWORD PTR _fl$[ebp]
; Line 5
fldz
fstp QWORD PTR _dou$[ebp]
; Line 6
xor eax, eax
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
このコードでどうしてもわからないのが次の部分です。
PUBLIC __real@0000000000000000
PUBLIC __real@00000000
PUBLIC _main
main関数の引数はvoidにしているはずなのに、この意味不明な公開変数?_real@はなにものなのでしょうか?
因みに
void main(){
}
のコードをコンパイルした時は
PUBLIC _main
だけでした。
どうしても気になります。
ご存じの方教えて下さい。よろしくお願いいたします。