リスト1 リスト2 リスト3 リスト4


〔リスト1〕プロトタイプを使わない例(test83.c)
#include <stdio.h>
//double Double2(double result);
int main(void)
{
    double result;
    printf("start\n");
    result = Double2(2);
    printf("%lf\n",result);
    return 0;
}
	
double Double2(double result)
{
    return result * result;
}


〔リスト2〕プロトタイプを使った例(test84.c)
#include <stdio.h>
double Double2(double result);
int main(void)
{
    double result;
    printf("start\n");
    result = Double2(2);
    printf("%lf\n",result);
    return 0;
}
	
double Double2(double result)
{
    return result * result;
}


〔リスト3〕プロトタイプを使わない例から生成されたアセンブラ(test83.s)
    .file       "test83.c"
    .version    "01.01"
gcc2_compiled.:
.section    .rodata
.LC0:
    .string "start\n"
.LC1:
    .string "%lf\n"
.text
    .align  4
.globl  main
    .type   main,@function
main:
    pushl   %ebp
    movl    %esp,%ebp
    subl    $24,%esp
    addl    $-12,%esp
    pushl   $.LC0
    call    printf
    addl    $16,%esp
    addl    $-12,%esp
    pushl   $2
    call    Double2
    addl    $16,%esp
    movl    %eax,%eax
    movl    %eax,-12(%ebp)
    fildl   -12(%ebp)
    fstpl   -8(%ebp)
    addl    $-4,%esp
    fldl    -8(%ebp)
    subl    $8,%esp
    fstpl   (%esp)
    pushl   $.LC1
    call    printf
    addl    $16,%esp
    xorl    %eax,%eax
    jmp .L2
    .p2align    4,,7
.L2:
    movl    %ebp,%esp
    popl    %ebp
    ret
.Lfe1:
    .size   main,.Lfe1-main
    .align  4
.globl  Double2
    .type   Double2,@function
Double2:
    pushl   %ebp
    movl    %esp,%ebp
    fldl    8(%ebp)
    fmull   8(%ebp)
    jmp .L3
    .p2align    4,,7
.L3:
    movl    %ebp,%esp
    popl    %ebp
    ret
.Lfe2:
    .size   Double2,.Lfe2-Double2
    .ident  "GCC: (GNU) 2.95.3 20010315 (release)"


〔リスト4〕プロトタイプを使った例から生成されたアセンブラ(test84.s)
    .file       "test84.c"
    .version    "01.01"
gcc2_compiled.:
.section    .rodata
.LC0:
    .string "start\n"
.LC2:
    .string "%lf\n"
    .align  8
.LC1:
    .long   0x0,0x40000000
.text
    .align  4
.globl  main
    .type   main,@function
main:
    pushl   %ebp
    movl    %esp,%ebp
    subl    $24,%esp
    addl    $-12,%esp
    pushl   $.LC0
    call    printf
    addl    $16,%esp
    addl    $-8,%esp
    fldl    .LC1
    subl    $8,%esp
    fstpl   (%esp)
    call    Double2
    addl    $16,%esp
    fstpl   -8(%ebp)
    addl    $-4,%esp
    fldl    -8(%ebp)
    subl    $8,%esp
    fstpl   (%esp)
    pushl   $.LC2
    call    printf
    addl    $16,%esp
    xorl    %eax,%eax
    jmp .L2
    .p2align    4,,7
.L2:
    movl    %ebp,%esp
    popl    %ebp
    ret
.Lfe1:
    .size   main,.Lfe1-main
    .align  4
.globl  Double2
    .type   Double2,@function
Double2:
    pushl   %ebp
    movl    %esp,%ebp
    fldl    8(%ebp)
    fmull   8(%ebp)
    jmp .L3
    .p2align    4,,7
.L3:
    movl    %ebp,%esp
    popl    %ebp
    ret
.Lfe2:
    .size   Double2,.Lfe2-Double2
    .ident  "GCC: (GNU) 2.95.3 20010315 (release)"