__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); } } |
__code factorial(int x) { goto factorial0(1, x); } int main(int argc, char **argv) { int i; i = atoi(argv[1]); goto factorial(i); return 0; } |
実際のコード | GCC 内で処理されるコード |
goto factorial0(1, x); |
goto factorial0(1, x); return; |
if(!TARGET_64BIT) { attrs = build_tree_list (get_identifier("fastcall"), NULL_TREE); declspecs_add_attrs(specs, attrs); }
({ int a = setjmp(env); int retval; void _cbc_internal_return(int retval_, jmp_buf _envp){ retval = retval_; longjmp(_envp, retval); } if (a) { return retval; } _cbc_internal_return; })