view factorial.c @ 6:509523ee1e27

add struct_longjump.c
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 24 Nov 2013 01:10:16 +0900
parents dee9711aeb06
children
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

__code print_factorial(int prod)
{
  printf("factorial = %d\n",prod);
  exit(0);
}

__code factorial0(int prod, int x)
{
  if ( x >= 1) {
    goto factorial0(prod*x, x-1);
  }else{
    goto print_factorial(prod);
  }

}

int factorial(int x)
{
  void *__return;
  void *__enviroment;
  printf("factorial entry\n");
  __enviroment = (void*)malloc(sizeof(jmp_buf));
  if (setjmp(__enviroment)){
    free(__enviroment);
    printf("factorial return\n");
    return 0;
  }
  __return = (void*)return1;
  goto factorial0(1, x);
  return -1;
}

int
main(int argc, char **argv)
{
  int i,ans;
  i = atoi(argv[1]);

  ans = factorial(i);
  printf("answer = %d\n",ans);
}